簡體   English   中英

Python lxml:如何遍歷備份樹

[英]Python lxml: How to traverse back up a tree

我有以下python代碼

import lxml.etree

root = lxml.etree.parse("../../xml/test.xml")

path="./pages/page/paragraph[contains(text(),'ash')]"
para = root.xpath(path)

一旦我到達了para節點,我就不想再走了。 現在,我想回到根目錄並查看所有<paragraph>節點。 有沒有辦法回去樹上。

還是這樣看。 我想要rootpara之間的子樹。 我該怎么辦?

供參考,這是xml

<document>
    <pages>
        <page>
            <paragraph>XBV</paragraph>
            <paragraph>GFH</paragraph>
        </page>
        <page>
            <paragraph>ash</paragraph>
            <paragraph>lplp</paragraph>
        </page>
    </pages>
</document>

現在在這種情況下,我想要節點XBV和GFH。 那怎么可能?

..會帶您上樹。

但是,我認為preceding是你正在尋找的東西:

前一個軸表示文檔中上下文節點之前的所有節點,但所有祖先,屬性和名稱空間節點除外。

./pages/page/paragraph[contains(text(),'ash')]//preceding::paragraph

樣例代碼:

import lxml.etree


data = """
<document>
    <pages>

    <page>
       <paragraph>XBV</paragraph>

       <paragraph>GFH</paragraph>
    </page>

    <page>
       <paragraph>ash</paragraph>

       <paragraph>lplp</paragraph>
    </page>

    </pages>
</document>
"""

tree = lxml.etree.fromstring(data)
print [item.text for item in tree.xpath("./pages/page/paragraph[contains(text(),'ash')]//preceding::paragraph")]

打印:

['XBV', 'GFH']

上去,讓所有先前page (僅頁)節點, paragraph節點內他們從文本中提取他們-

>>>expresson = "./pages/page/paragraph[contains(text(),'ash')]//preceding::page//paragraph"
>>>x=  [i.text for i in expresson]
>>>['XBV', 'GFH']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM