– 支持构建部分DOM树 – 结构化标记处理工具(Python教程)(参考资料)
xml.dom.pulldom
– 支持构建部分DOM树
源代码: Lib / xml / dom / pulldom.py
xml.dom.pulldom
模块提供“拉解析器”“这也可以用于在必要时生成DOM可访问的文档片段。基本概念涉及从传入的XML流中提取“事件”并对其进行处理。与SAX一起使用事件驱动的处理模型以及回调相比,拉解析器的用户负责显式地从流中提取事件,循环这些事件直到处理完成或发生错误情况.
警告
xml.dom.pulldom
模块不能安全地防止恶意构造的数据。如果您需要解析不受信任的orunauthenticated数据,请参阅 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
.
由于文档被视为“平面”事件流,因此隐式遍历文档“树”,并且无论树中的深度如何,都可以找到所需的元素。换句话说,人们不需要考虑分层问题,例如文档节点的递归搜索,尽管如果元素的上下文很重要,那么要么需要保持一些与上下文相关的状态(即,记住任何一个在文档中的位置))或使用DOMEventStream.expandNode()
方法并切换到与DOM相关的处理.
xml.dom.pulldom.
parse
(stream_or_string, parser=None, bufsize=None)-
返回
DOMEventStream
从给定的输入。stream_or_string可以是文件名,也可以是类文件对象。parser,如果给出,必须是XMLReader
宾语。此函数将更改分析器的文档处理程序并激活名称空间支持;其他解析器配置(比如设置实体解析器)必须事先完成.
如果你在字符串中有XML,你可以使用parseString()
功能改为:
xml.dom.pulldom.
parseString
(string, parser=None)-
返回
DOMEventStream
代表(Unicode)string.
DO EventStream Objects
- class
xml.dom.pulldom.
DOMEventStream
(stream, parser, bufsize) -
getEvent
()-
返回一个包含event当前node为
xml.dom.minidom.Document
如果事件等于START_DOCUMENT
,xml.dom.minidom.Element
如果事件等于START_ELEMENT
或END_ELEMENT
或xml.dom.minidom.Text
如果事件等于CHARACTERS
。当前节点不包含有关其子节点的信息,除非expandNode()
被称为
expandNode
(node)-
将node的所有孩子扩大到node。例:
from xml.dom import pulldomxml = "<html><title>Foo</title> <p>Some text <div>and more</div></p> </html>"doc = pulldom.parseString(xml)for event, node in doc: if event == pulldom.START_ELEMENT and node.tagName == "p": # Following statement only prints "<p/>" print(node.toxml()) doc.expandNode(node) # Following statement prints node with all its children "<p>Some text <div>and more</div></p>" print(node.toxml())
reset
()
评论被关闭。