与 xmllib 相比,上述示例中要注意两件小事: .parse() 方法处理整个流或字符串,所以不必为语法分析器创建循环; .parse() 同样能灵活地接收一个文件名、一个文件对象,或是众多的类文件对象(一些具有 .read() 方式)。
包:DOM
DOM 是一种 XML 文档的高级树型表示。该模型并非只针对 Python,而是一种普通 XML 模型(请参阅 参考资料以获取进一步信息)。Python 的 DOM 包是基于 SAX 构建的,并且包括在 Python 2.0 的标准 XML 支持里。由于篇幅所限,没有将代码示例加到本文中,但在 XML-SIG 的 "Python/XML HOWTO" 中给出了一个极好的总体描述:
文档对象模型为 XML 文档指定了树型表示。顶级文档实例是树的根,它只有一个子代,即顶级元素实例;这个元素有表示内容和子元素的子节点,他们也可以有子代,以此类推。定义的函数允许随意遍历结果树,访问元素和属性值,插入和删除节点,以及将树转换回 XML。DOM 可以用于修改 XML 文档,因为可以创建一棵 DOM 树,通过添加新节点和来回移动子树来修改这棵树,然后生成一个新的 XML 文档作为输出。您也可以自己构造一棵 DOM 树,然后将它转换成 XML;用这种方法生成 XML 输出比仅将 <tag1>...</tag1> 写入文件的方法更灵活。使用 xml.dom 模块的语法与早期的文章相比有了一些变动。Python 2.0 中自带的 DOM 实现被称为 xml.dom.minidom ,并提供轻量级和小型版本的 DOM。显然,完整的 XML-SIG 的 DOM 中有些试验性的特性并未被放入 xml.dom.minidom 中,但大家并不会注意到这一点。
生成 DOM 对象很简单;只需:
清单 4: 在 XML 文件中创建 Python DOM 对象
from
xml.dom.minidom
import
parse, parseString
dom1 = parse('mydata.xml') # parse an XML file by name
使用 DOM 对象是种非常直接的 OOP 模式的工作。然而,经常在无法立刻简单区分的层级(除了循环列举)中碰到许多类似清单的属性。例如,以下是一段普通的 DOM Python 代码片断:
清单 5: 通过 Python DOM 节点对象的迭代
for
node
in
dom_node.childNodes:
if
node.nodeName == '#text': # PCDATA is a kind of node,
PCDATA = node.nodeValue # but not a new subtag
elif
node.nodeName == 'spam':
spam_node_list.append(node) # Create list of <spam> nodes
相关专题
- Python实用指南 (220篇文章)
- XML详解 (1550篇文章)
- Python相关文章 (220篇文章)
- Python编程 (220篇文章)
- XML基础教程 (852次浏览)
- XML简介 (714次浏览)
- 如何读取XML文件内容 (561次浏览)
- XML与面向Web的数据挖掘技术 (544次浏览)
- 了解 XML实现通用的数据访问 (482次浏览)
- XML入门精解之文件格式定义(DTD) (376次浏览)
- XML的简单读取与写入 (339次浏览)
- DOM的结构 (329次浏览)
- XML入门之11问答 (323次浏览)
- XMLHTTP资料 (289次浏览)



