xml.etree 获取具有特定属性的孩子的标签

问题描述 投票:0回答:3

我有以下 xml 文件:

<node id="1416646243" />
<node id="1416646244">
    <tag k="crossing" v="unregulated" />
</node>
<node id="1416646245">
    <tag k="crossing" v="traffic_signals" />
</node>

我想选择

<node>
标签,其中包含一个
<tag>
标签与属性
v="traffic_signals"
.
但是,如果我使用以下代码,我会得到
<tag>
标签作为回报。

root.find('.//node/tag[@v="traffic_signals"]')

据我所知,

xml.etree
没有提供获得父母的方法。

我怎样才能真正获得

node
标签?

python xml xml-parsing xml.etree
3个回答
1
投票

效率不高 - 但它有效

import xml.etree.ElementTree as ET

xml = '''<r>
<node id="1416646243" />
<node id="1416646244">
    <tag k="crossing" v="unregulated" />
</node>
<node id="1416646245">
    <tag k="crossing" v="traffic_signals" />
</node>
</r>'''

root = ET.fromstring(xml)
node = [n for n in root.findall('.node') if n.find('tag[@v="traffic_signals"]') is not None][0]
print(node.attrib)

输出

{'id': '1416646245'}

0
投票

这是您的解决方案,您可以检查“//parent[./direct_child]”或“//parent[.//children_of_child]”中带有子元素的元素结果元素将是父元素

root.find('.//node[./tag[@v="traffic_signals"]]')

0
投票

有点hacky,但是您可以在匹配孩子后使用

..
返回到父母。

root.find('.//node/tag[@v="traffic_signals"]/..')
© www.soinside.com 2019 - 2024. All rights reserved.