且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Python ElementTree:使用XPath通过子文本查找元素

更新时间:2023-11-07 14:04:22

直接使用 lxml.etree (相同的应该适用于 ElementTree ),您可以实现以下结果:

Using lxml.etree directly (the same should apply to ElementTree), you can achieve the result like this:

doc = lxml.etree.fromstring(...)
tag_elements = doc.xpath("/peers/peer/offset[text()='1']/../tag")

tag_elements 将是属于< peer> 元素的< tag> 元素的列表包含1的< offset> 元素.

tag_elements will be the list of <tag> elements belonging to <peer> elements containing an <offset> element containing 1.

给出输入(我添加了< peer> 子句以强调 tag_elements 是列表):

Given input (I've added a <peer> clause to emphasize tag_elements being a list):

<peers>
    <peer>
        <offset>1</offset>
        <tag>TRUE</tag>
    </peer>
    <peer>
        <offset>1</offset>
        <tag>OTHER</tag>
    </peer>
    <peer>
        <offset>2</offset>
        <tag>FALSE</tag>
    </peer>
</peers>

tag_elements 将包含两个元素:

for tag in tag_elements:
    print tag.text
-> TRUE
-> OTHER

更新:

doc.xpath("/peers/peer [offset = 1]/tag")也可以正常工作.

但是 doc.xpath("./peers/peer [offset = 1]/tag")不会.