Python能够简单而有效地实现面向对象编程,特别适用于快速应用程序开发,也可以用来开发大规模的重要的商业应用。Python是一个理想的脚本语言,所以深受开发人员的大力支持,下面对Python示例进行解说。
测试结果表明, REXML xml.minidom样消耗量资源:解析 Hamlet.xml 10 秒,占 14 MB 存;解析 Weblog.xml 190 秒,占 150 MB 存。显然,编程语言选择通常优先于库比较。。
ElementTree 个优点于能够被循环运行。这指,您以读入个 XML 实例,修改数据结构使非常类似于本机风格,然调 .write() 进行重新序列化得格式良好 XML。当然,DOM 能做这点,但 gnosis.xml.objectify不行。#t#
gnosis.xml.objectify构造个定制输出函数于生成 XML 不 那么困难 - 但这不能自动进行。使 ElementTree 以及 ElementTree 实例 .write() ,通过便利函数 elementtree.ElementTree.dump() 以序列化单独 Element 实例。这让您以从单独象节点 - 其包括 XML 实例根节点 - 编 XML 片段。
提出个简单任务比较 ElementTree gnosis.xml.objectify API。于基准测试型文档 weblog.xml 包含约 8,500 个 <entry> 元素,每个元素都含有相同子字段集合 - 这个面向数据 XML 文档典型布局。
处理该文时,任务能从每个 entry 收集些字段,但这只其某些字段有特定值(或范围,或匹配部分容)。当然,如果您确实只想运行这个任务。使个流 API(如 SAX)以避免存整个文档建模 - 但这里假定该任务应程序型数据结构运行任务。个 <entry> 元素能像这样:
- from elementtree
- import ElementTree
- weblog = ElementTree.parse(
- 'weblog.xml').getroot()
- interesting = [entry
- for entry
- in weblog.findall(
- 'entry')
- if entry.find(
- 'host').text==
- '209.202.148.31'
- and
- entry.find(
- 'statusCode').text==
- '200']
- for e
- in interesting:
注意面不同处。 Python子元素节点直接作节点属性进行连接(每个节点都个根据标记名命名定制类)。另方面, ElementTree 使 Element 类查找子节点。 .findall() 返回所有匹配节点列表; .find() 则仅返回***匹配节点;
返回节点文本容。如果您只想 gnosis.xml.objectify 子元素***匹配,只其建立索引即 - 例如, node.tag[0] 。但如果这样子元素只有个,那么无需建立显式索引,您以引用。
但 Python示例,其实您并不 需显式查找所有 <entry> 元素;迭代时 Element 实例行方式类似于列表。这里注意点,不管子节点有何标记, 所有子节点都进行迭代。相比, gnosis.xml.objectify 节点没有置遍历所有子元素。尽管如此,构造个行 children() 函数还挺简单(发行版包含该函数)。