| 導航:起始頁 > Dive Into Python > XML 處理 > 訪問元素屬性 | << >> | ||||
深入 Python :Dive Into Python 中文版Python 從新手到專家 [Dip_5.4b_CPyUG_Release] |
|||||
XML 元素可以有一個或者多個屬性,只要已經解析了一個 XML 文檔,訪問它們就太簡單了。
在這部分中,將使用 binary.xml 語法文件,你在上一節中已經看到過了。
| 這部分由于某個含義重疊的術語可能讓人有點糊涂。在一個 XML 文檔中,元素可以有屬性,而 Python 對象也有屬性。當你解析一個 XML 文檔時,你得到了一組 Python 對象,它們代表 XML 文檔中的所有片段,同時有些 Python 對象代表 XML 元素的屬性。但是表示 (XML) 屬性的 (Python) 對象也有 (Python) 屬性,它們用于訪問對象表示的 (XML) 屬性。我告訴過你它讓人糊涂。我會公開提出關于如何更明顯地區分這些不同的建議。 | |
>>> xmldoc = minidom.parse('binary.xml') >>> reflist = xmldoc.getElementsByTagName('ref') >>> bitref = reflist[0] >>> print bitref.toxml() <ref id="bit"> <p>0</p> <p>1</p> </ref> >>> bitref.attributes<xml.dom.minidom.NamedNodeMap instance at 0x81e0c9c> >>> bitref.attributes.keys()
![]()
[u'id'] >>> bitref.attributes.values()
[<xml.dom.minidom.Attr instance at 0x81d5044>] >>> bitref.attributes["id"]
<xml.dom.minidom.Attr instance at 0x81d5044>
| 每個 Element 對象都有一個 attributes 屬性,它是一個 NamedNodeMap 對象。聽上去挺嚇人的,其實不然,因為 NamedNodeMap 是一個行為像字典的對象,所以你已經知道怎么使用它了。 | |
| 將 NamedNodeMap 視為一個字典,你可以通過 attributes.keys() 獲得屬性名稱的一個列表。這個元素只有一個屬性,'id'。 | |
| 屬性名稱,像其它 XML 文檔中的文本一樣,都是以 unicode 保存的。 | |
| 再次將 NamedNodeMap 視為一個字典,你可以通過 attributes.values() 獲取屬性值的一個列表。這些值本身是 Attr 類型的對象。你將在下一個例子中看到如何獲取對象的有用信息。 | |
| 仍然把 NamedNodeMap 視為一個字典,你可以通過常用的字典語法和名稱訪問單個的屬性。(那些非常認真的讀者將已經知道 NamedNodeMap 類是如何實現這一技巧的:通過定義一個 __getitem__ 專用方法。其它的讀者可能樂意接受這一事實:他們不需要理解它是如何工作的就可以有效地使用它。) |
>>> a = bitref.attributes["id"] >>> a <xml.dom.minidom.Attr instance at 0x81d5044> >>> a.nameu'id' >>> a.value
u'bit'
| 類似于字典,一個 XML 元素的屬性沒有順序。屬性可以以某種順序偶然 列在最初的 XML 文檔中,而在 XML 文檔解析為 Python 對象時,Attr 對象以某種順序偶然 列出,這些順序都是任意的,沒有任何特別的含義。你應該總是使用名稱來訪問單個屬性,就像字典的鍵一樣。 | |
<< 搜索元素 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
Segue >> |