首页 > 深入Python > XML 处理 > XML 分析 | << >> | ||||
diveintopython.org Python for experienced programmers |
正如我说的,实际对一个XML文档的分析非常简单:一行代码。从这里出发到哪儿去就是你的事了。
>>> from xml.dom import minidom >>> xmldoc = minidom.parse('/a/diveintopython/common/py/kgp/binary.xml') >>> xmldoc <xml.dom.minidom.Document instance at 010BE87C> >>> print xmldoc.toxml() <?xml version="1.0" ?> <grammar> <ref id="bit"> <p>0</p> <p>1</p> </ref> <ref id="byte"> <p><xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/>\ <xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/></p> </ref> </grammar>
正如我们在前一节中所看到的,这样会从 xml.dom 包中导入 minidom 模块。 |
|
这儿就是进行所有工作的一行代码:minidom.parse 接收一个参数,并返回一个分析过的XML文档的表示。这个参数可以是许多东西;在本例中,它只是一个在我的硬盘上的XML文档文件名。(为了照着执行,你需要将路径改为指向下载的例子所在的目录。)但你也可以传入一个文件对象,或甚至是一个类似文件的对象。我们将在本章后面好好地利用这一灵活性。 |
|
从 minidom.parse 中返回的对象是一个 Document 对象,一个 Node 类的子类。这个 Document 对象是一个复杂的树状的联锁Python对象结构的根层次。这些Python对象完全表示了我们传给 minidom.parse 的XML文档。 | |
toxml 是 Node 类的一个方法(因此可以在我们从 minidom.parse 中得到的 Document 对象上使用)。toxml 会打印出这个 Node 所表示的XML。对于 Document 结点,这样会打印出整个XML文件。 |
既然我们在内存中有了一个XML文件,就可以对其进行遍历了。
>>> xmldoc.childNodes [<DOM Element: grammar at 17538908>] >>> xmldoc.childNodes[0] <DOM Element: grammar at 17538908> >>> xmldoc.firstChild <DOM Element: grammar at 17538908>
>>> grammarNode = xmldoc.firstChild >>> print grammarNode.toxml() <grammar> <ref id="bit"> <p>0</p> <p>1</p> </ref> <ref id="byte"> <p><xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/>\ <xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/></p> </ref> </grammar>
>>> grammarNode.childNodes [<DOM Text node "\n">, <DOM Element: ref at 17533332>, \ <DOM Text node "\n">, <DOM Element: ref at 17549660>, <DOM Text node "\n">] >>> print grammarNode.firstChild.toxml() >>> print grammarNode.childNodes[1].toxml() <ref id="bit"> <p>0</p> <p>1</p> </ref> >>> print grammarNode.childNodes[3].toxml() <ref id="byte"> <p><xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/>\ <xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/></p> </ref> >>> print grammarNode.lastChild.toxml()
包 |
1 2 3 4 5 6 7 8 9 |
Unicode |