繁体   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