更新时间: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")
不会.