| 導航:起始頁 > Dive Into Python > XML 處理 > XML 解析 | << >> | ||||
深入 Python :Dive Into Python 中文版Python 從新手到專家 [Dip_5.4b_CPyUG_Release] |
|||||
正如我說的,實際解析一個 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 對象的一個復雜樹狀結構的根層次,這些 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 >> |