新聞中心
xml.dom.pulldom —- 支持構建部分 DOM 樹
源代碼: Lib/xml/dom/pulldom.py

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,樺南企業(yè)網(wǎng)站建設,樺南品牌網(wǎng)站建設,網(wǎng)站定制,樺南網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,樺南網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
xml.dom.pulldom 模塊提供了一個“拉取解析器”,它能在必要時被用于產(chǎn)生文件的可訪問 DOM 的片段。 其基本概念包括從輸入的 XML 流拉取“事件”并處理它們。 與同樣地同時應用了事件驅(qū)動處理模型加回調(diào)函數(shù)的 SAX 不同,拉取解析器的用戶要負責顯式地從流拉取事件,并循環(huán)遍歷這些事件直到處理結束或者發(fā)生了錯誤條件。
警告
xml.dom.pulldom 模塊對于惡意構建的數(shù)據(jù)是不安全的。 如果你需要解析不受信任或未經(jīng)身份驗證的數(shù)據(jù),請參閱 XML 漏洞。
在 3.7.1 版更改: SAX 解析器默認不再處理一般外部實體以提升在默認情況下的安全性。 要啟用外部實體處理,請傳入一個自定義的解析器實例:
from xml.dom.pulldom import parsefrom xml.sax import make_parserfrom xml.sax.handler import feature_external_gesparser = make_parser()parser.setFeature(feature_external_ges, True)parse(filename, parser=parser)
示例:
from xml.dom import pulldomdoc = pulldom.parse('sales_items.xml')for event, node in doc:if event == pulldom.START_ELEMENT and node.tagName == 'item':if int(node.getAttribute('price')) > 50:doc.expandNode(node)print(node.toxml())
event 是一個常量,可以取下列值之一:
-
START_ELEMENT -
END_ELEMENT -
COMMENT -
START_DOCUMENT -
END_DOCUMENT -
CHARACTERS -
PROCESSING_INSTRUCTION -
IGNORABLE_WHITESPACE
node 是一個 xml.dom.minidom.Document, xml.dom.minidom.Element 或 xml.dom.minidom.Text 類型的對象。
由于文檔是被當作“展平”的事件流來處理的,文檔“樹”會被隱式地遍歷并且無論所需元素在樹中的深度如何都會被找到。 換句話說,不需要考慮層級問題,例如文檔節(jié)點的遞歸搜索等,但是如果元素的內(nèi)容很重要,則有必要保留一些上下文相關的狀態(tài)(例如記住任意給定點在文檔中的位置)或者使用 DOMEventStream.expandNode() 方法并切換到 DOM 相關的處理過程。
class xml.dom.pulldom.PullDom(documentFactory=None)
xml.sax.handler.ContentHandler 的子類。
class xml.dom.pulldom.SAX2DOM(documentFactory=None)
xml.sax.handler.ContentHandler 的子類。
xml.dom.pulldom.parse(stream_or_string, parser=None, bufsize=None)
基于給定的輸入返回一個 DOMEventStream。 stream_or_string 可以是一個文件名,或是一個文件類對象。 parser 如果給出,則必須是一個 XMLReader 對象。 此函數(shù)將改變解析器的文檔處理程序并激活命名空間支持;其他解析器配置(例如設置實體解析器)必須在之前已完成。
如果你將 XML 存放為字符串形式,則可以改用 parseString() 函數(shù):
xml.dom.pulldom.parseString(string, parser=None)
返回一個 DOMEventStream 來表示 (Unicode) string。
xml.dom.pulldom.default_bufsize
將 bufsize 形參的默認值設為 parse()。
此變量的值可在調(diào)用 parse() 之前修改并使新值生效。
DOMEventStream 對象
class xml.dom.pulldom.DOMEventStream(stream, parser, bufsize)
在 3.11 版更改: Support for __getitem__() method has been removed.
-
getEvent()
返回一個元組,其中包含 event 和
xml.dom.minidom.Document形式的當前 node 如果 event 等于START_DOCUMENT,包含xml.dom.minidom.Element如果 event 等于START_ELEMENT或END_ELEMENT或者xml.dom.minidom.Text如果 event 等于CHARACTERS。 當前 node 不包含有關其子節(jié)點的信息,除非 expandNode() 被調(diào)用。 -
expandNode(node)
將 node 的所有子節(jié)點擴展到 node 中。 例如:
from xml.dom import pulldomxml = 'Foo Some text
and more'doc = pulldom.parseString(xml)for event, node in doc:if event == pulldom.START_ELEMENT and node.tagName == 'p':# Following statement only prints ''print(node.toxml())doc.expandNode(node)# Following statement prints node with all its children 'Some text
and more'print(node.toxml())
-
reset()
網(wǎng)頁標題:創(chuàng)新互聯(lián)Python教程:xml.dom.pulldom—-支持構建部分DOM樹
文章來源:http://m.fisionsoft.com.cn/article/cccjsod.html


咨詢
建站咨詢
