您当前位置:首页 > 深入 Python > XML 处理 > 解析 XML | << >> | ||||
深入 Python从 Python 新手到专家 |
正如我所说,解析 XML 文档实际上非常简单:只需一行代码。如何处理解析后的结果取决于您。
>>> from xml.dom import minidom>>> xmldoc = minidom.parse('~/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 对象组成,这些对象完整地表示您传递给 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()
![]()
>>> grammarNode <DOM Element: grammar at 19167148> >>> refNode = grammarNode.childNodes[1]>>> refNode <DOM Element: ref at 17987740> >>> refNode.childNodes
[<DOM Text node "\n">, <DOM Text node " ">, <DOM Element: p at 19315844>, \ <DOM Text node "\n">, <DOM Text node " ">, \ <DOM Element: p at 19462036>, <DOM Text node "\n">] >>> pNode = refNode.childNodes[2] >>> pNode <DOM Element: p at 19315844> >>> print pNode.toxml()
<p>0</p> >>> pNode.firstChild
<DOM Text node "0"> >>> pNode.firstChild.data
u'0'
<< 包 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
Unicode >> |