创新互联Python教程:xml.dom.pulldom—-支持构建部分DOM树

xml.dom.pulldom —- 支持构建部分 DOM 树

源代码: Lib/xml/dom/pulldom.py

成都创新互联是一家集网站建设,桦南企业网站建设,桦南品牌网站建设,网站定制,桦南网站建设报价,网络营销,网络优化,桦南网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。


xml.dom.pulldom 模块提供了一个“拉取解析器”,它能在必要时被用于产生文件的可访问 DOM 的片段。 其基本概念包括从输入的 XML 流拉取“事件”并处理它们。 与同样地同时应用了事件驱动处理模型加回调函数的 SAX 不同,拉取解析器的用户要负责显式地从流拉取事件,并循环遍历这些事件直到处理结束或者发生了错误条件。

警告

xml.dom.pulldom 模块对于恶意构建的数据是不安全的。 如果你需要解析不受信任或未经身份验证的数据,请参阅 XML 漏洞。

在 3.7.1 版更改: SAX 解析器默认不再处理一般外部实体以提升在默认情况下的安全性。 要启用外部实体处理,请传入一个自定义的解析器实例:

 
 
 
 
  1. from xml.dom.pulldom import parse
  2. from xml.sax import make_parser
  3. from xml.sax.handler import feature_external_ges
  4. parser = make_parser()
  5. parser.setFeature(feature_external_ges, True)
  6. parse(filename, parser=parser)

示例:

 
 
 
 
  1. from xml.dom import pulldom
  2. doc = pulldom.parse('sales_items.xml')
  3. for event, node in doc:
  4. if event == pulldom.START_ELEMENT and node.tagName == 'item':
  5. if int(node.getAttribute('price')) > 50:
  6. doc.expandNode(node)
  7. 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.Elementxml.dom.minidom.Text 类型的对象。

由于文档是被当作“展平”的事件流来处理的,文档“树”会被隐式地遍历并且无论所需元素在树中的深度如何都会被找到。 换句话说,不需要考虑层级问题,例如文档节点的递归搜索等,但是如果元素的内容很重要,则有必要保留一些上下文相关的状态(例如记住任意给定点在文档中的位置)或者使用 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 对象。 此函数将改变解析器的文档处理程序并激活命名空间支持;其他解析器配置(例如设置实体解析器)必须在之前已完成。

如果你将 XML 存放为字符串形式,则可以改用 parseString() 函数:

xml.dom.pulldom.parseString(string, parser=None)

返回一个 DOMEventStream 来表示 (Unicode) string

xml.dom.pulldom.default_bufsize

bufsize 形参的默认值设为 parse()。

此变量的值可在调用 parse() 之前修改并使新值生效。

DOMEventStream 对象

class xml.dom.pulldom.DOMEventStream(stream, parser, bufsize)

在 3.11 版更改: Support for __getitem__() method has been removed.

  • getEvent()

    返回一个元组,其中包含 eventxml.dom.minidom.Document 形式的当前 node 如果 event 等于 START_DOCUMENT,包含 xml.dom.minidom.Element 如果 event 等于 START_ELEMENTEND_ELEMENT 或者 xml.dom.minidom.Text 如果 event 等于 CHARACTERS。 当前 node 不包含有关其子节点的信息,除非 expandNode() 被调用。

  • expandNode(node)

    node 的所有子节点扩展到 node 中。 例如:

       
       
       
       
    1. from xml.dom import pulldom
    2. xml = 'Foo

      Some text

      and more

      '
    3. doc = pulldom.parseString(xml)
    4. for event, node in doc:
    5. if event == pulldom.START_ELEMENT and node.tagName == 'p':
    6. # Following statement only prints '

      '

    7. print(node.toxml())
    8. doc.expandNode(node)
    9. # Following statement prints node with all its children '

      Some text

      and more

      '
    10. print(node.toxml())
  • reset()

标题名称:创新互联Python教程:xml.dom.pulldom—-支持构建部分DOM树
转载注明:http://www.hantingmc.com/qtweb/news2/91002.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联