<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    10.4. 查找節點的直接子節點

                    解析 XML 文檔時,另一個有用的己技巧是查找某個特定元素的所有直接子元素。例如,在語法文件中,一個 ref 元素可以有數個 p 元素,其中每一個都可以包含很多東西,包括其他的 p 元素。你只要查找作為 ref 孩子的 p 元素,不用查找其他 p 元素的孩子 p 元素。

                    你可能認為你只要簡單地使用 getElementsByTagName 來實現這點就可以了,但是你不可以這么做。getElementsByTagName 遞歸搜索并返回所有找到的元素的單個列表。由于 p 元素可以包含其他的 p 元素,你不能使用 getElementsByTagName,因為它會返回你不要的嵌套 p 元素。為了只找到直接子元素,你要自己進行處理。

                    例 10.16. 查找直接子元素

                        def randomChildElement(self, node):
                            choices = [e for e in node.childNodes
                                       if e.nodeType == e.ELEMENT_NODE] 1 2 3
                            chosen = random.choice(choices)             4
                            return chosen                              
                    1 正如你在例 9.9 “獲取子節點”中看到的,childNodes 屬性返回元素所有子節點的一個列表。
                    2 然而,正如你在例 9.11 “子節點可以是文本”中看到的,childNodes 返回的列表包含了所有不同類型的節點,包括文本節點。這并不是你在這里要查找的。你只要元素形式的孩子。
                    3 每個節點都有一個 nodeType 屬性,它可以是ELEMENT_NODE, TEXT_NODE, COMMENT_NODE,或者其它值。可能值的完整列表在 xml.dom 包的 __init__.py 文件中。(關于包的介紹,參見第 9.2 節 “包”。) 但你只是對元素節點有興趣,所以你可以過濾出一個列表,其中只包含 nodeTypeELEMENT_NODE的節點。
                    4 只要擁有了一個真實元素的列表,選擇任意一個都很容易。Python 有一個叫 random 的模塊,它包含了好幾個有用的函數。random.choice 函數接收一個任意數量條目的列表并隨機返回其中的一個條目。比如,如果 ref 元素包含了多個 p 元素,那么 choices 將會是 p 元素的一個列表,而 chosen 將被賦予其中的某一個值,而這個值是隨機選擇的。

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频