我有以下 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
标签?
效率不高 - 但它有效
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'}
这是您的解决方案,您可以检查“//parent[./direct_child]”或“//parent[.//children_of_child]”中带有子元素的元素结果元素将是父元素
root.find('.//node[./tag[@v="traffic_signals"]]')
有点hacky,但是您可以在匹配孩子后使用
..
返回到父母。
root.find('.//node/tag[@v="traffic_signals"]/..')