<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            9.6. 訪問元素屬性

            XML 元素可以有一個或者多個屬性,只要已經解析了一個 XML 文檔,訪問它們就太簡單了。

            在這部分中,將使用 binary.xml 語法文件,你在上一節中已經看到過了。

            注意
            這部分由于某個含義重疊的術語可能讓人有點糊涂。在一個 XML 文檔中,元素可以有屬性,而 Python 對象也有屬性。當你解析一個 XML 文檔時,你得到了一組 Python 對象,它們代表 XML 文檔中的所有片段,同時有些 Python 對象代表 XML 元素的屬性。但是表示 (XML) 屬性的 (Python) 對象也有 (Python) 屬性,它們用于訪問對象表示的 (XML) 屬性。我告訴過你它讓人糊涂。我會公開提出關于如何更明顯地區分這些不同的建議。

            例 9.24. 訪問元素屬性

            >>> 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          1
            <xml.dom.minidom.NamedNodeMap instance at 0x81e0c9c>
            >>> bitref.attributes.keys()   2 3
            [u'id']
            >>> bitref.attributes.values() 4
            [<xml.dom.minidom.Attr instance at 0x81d5044>]
            >>> bitref.attributes["id"]    5
            <xml.dom.minidom.Attr instance at 0x81d5044>
            1 每個 Element 對象都有一個 attributes 屬性,它是一個 NamedNodeMap 對象。聽上去挺嚇人的,其實不然,因為 NamedNodeMap 是一個行為像字典的對象,所以你已經知道怎么使用它了。
            2 NamedNodeMap 視為一個字典,你可以通過 attributes.keys() 獲得屬性名稱的一個列表。這個元素只有一個屬性,'id'
            3 屬性名稱,像其它 XML 文檔中的文本一樣,都是以 unicode 保存的。
            4 再次將 NamedNodeMap 視為一個字典,你可以通過 attributes.values() 獲取屬性值的一個列表。這些值本身是 Attr 類型的對象。你將在下一個例子中看到如何獲取對象的有用信息。
            5 仍然把 NamedNodeMap 視為一個字典,你可以通過常用的字典語法和名稱訪問單個的屬性。(那些非常認真的讀者將已經知道 NamedNodeMap 類是如何實現這一技巧的:通過定義一個 __getitem__ 專用方法。其它的讀者可能樂意接受這一事實:他們不需要理解它是如何工作的就可以有效地使用它。)

            例 9.25. 訪問單個屬性

            >>> a = bitref.attributes["id"]
            >>> a
            <xml.dom.minidom.Attr instance at 0x81d5044>
            >>> a.name  1
            u'id'
            >>> a.value 2
            u'bit'
            1 Attr 對象完整代表了單個 XML 元素的單個 XML 屬性。屬性的名稱 (與你在 bitref.attributes NamedNodeMap 偽字典中尋找的對象同名) 保存在a.name中。
            2 這個 XML 屬性的真實文本值保存在 a.value 中。
            注意
            類似于字典,一個 XML 元素的屬性沒有順序。屬性可以以某種順序偶然 列在最初的 XML 文檔中,而在 XML 文檔解析為 Python 對象時,Attr 對象以某種順序偶然 列出,這些順序都是任意的,沒有任何特別的含義。你應該總是使用名稱來訪問單個屬性,就像字典的鍵一樣。
            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线