<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.5. 搜索元素

            通過一步步訪問每一個節點的方式遍歷 XML 文檔可能很乏味。如果你正在尋找些特別的東西,又恰恰它們深深埋入了你的 XML 文檔,有個捷徑讓你可以快速找到它:getElementsByTagName

            在這部分,將使用 binary.xml 語法文件,它的內容如下:

            例 9.20. binary.xml

            <?xml version="1.0"?>
            <!DOCTYPE grammar PUBLIC "-//diveintopython.org//DTD Kant Generator Pro v1.0//EN" "kgp.dtd">
            <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>

            它有兩個 ref'bit' (位) 和 'byte' (字節)。一個 bit'0' 或者 '1',而一個 byte 是 8 個 bit

            例 9.21. getElementsByTagName 介紹

            >>> from xml.dom import minidom
            >>> xmldoc = minidom.parse('binary.xml')
            >>> reflist = xmldoc.getElementsByTagName('ref') 1
            >>> reflist
            [<DOM Element: ref at 136138108>, <DOM Element: ref at 136144292>]
            >>> print reflist[0].toxml()
            <ref id="bit">
              <p>0</p>
              <p>1</p>
            </ref>
            >>> print reflist[1].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>
            
            1 getElementsByTagName 接收一個參數,即要找的元素的名稱。它返回一個 Element 對象的列表,列表中的對象都是有指定名稱的 XML 元素。在本例中,你能找到兩個 ref 元素。

            例 9.22. 每個元素都是可搜索的

            >>> firstref = reflist[0]                      1
            >>> print firstref.toxml()
            <ref id="bit">
              <p>0</p>
              <p>1</p>
            </ref>
            >>> plist = firstref.getElementsByTagName("p") 2
            >>> plist
            [<DOM Element: p at 136140116>, <DOM Element: p at 136142172>]
            >>> print plist[0].toxml()                     3
            <p>0</p>
            >>> print plist[1].toxml()
            <p>1</p>
            1 繼續前面的例子,在 reflist 中的第一個對象是 'bit' ref元素。
            2 你可以在這個 Element 上使用相同的 getElementsByTagName 方法來尋找所有在'bit' ref 元素中的<p>元素。
            3 和前面一樣,getElementsByTagName 方法返回一個找到元素的列表。在本例中,你有兩個元素,每“位”各占一個。

            例 9.23. 搜索實際上是遞歸的

            >>> plist = xmldoc.getElementsByTagName("p") 1
            >>> plist
            [<DOM Element: p at 136140116>, <DOM Element: p at 136142172>, <DOM Element: p at 136146124>]
            >>> plist[0].toxml()                         2
            '<p>0</p>'
            >>> plist[1].toxml()
            '<p>1</p>'
            >>> plist[2].toxml()                         3
            '<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>'
            1 仔細注意這個例子和前面例子之間的不同。前面,你是在 firstref 中搜索 p 元素,但是這里你是在 xmldoc 中搜索 p 元素,xmldoc 是代表了整個 XML 文檔的根層對象。這樣就會 找到嵌套在 ref 元素 (它嵌套在根 grammar 元素中) 中的 p 元素。
            2 前兩個 p 元素在第一個 ref 內 ('bit' ref)。
            3 后一個 p 元素在第二個 ref 中 ('byte' ref)。
            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

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

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

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

                      亚洲欧美在线