You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

xml.etree如何获取含指定属性子标签的node节点

解决方案

不需要先定位子<tag>再反向查找父节点,直接调整XPath的筛选逻辑,就能直接返回目标<node>元素。

正确XPath写法

.//node[tag/@v="traffic_signals"]

写法说明:

  • 把对<tag>子节点的属性校验放在<node>后的方括号谓词中,含义是匹配所有满足「存在v属性为traffic_signals的tag子节点」的node元素
  • 你之前的写法将查询路径终点设为<tag>,所以返回结果自然是匹配到的tag标签,而非上层node。

可运行示例

import xml.etree.ElementTree as ET

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

root = ET.fromstring(xml_content)
target_node = root.find('.//node[tag/@v="traffic_signals"]')
print(target_node.attrib) # 输出 {'id': '1416646245'},即为目标node节点

反向查父节点的通用方法

如果在其他场景下你已经拿到了子元素,确实需要反向获取父节点,可以手动构建父节点映射表,无需依赖第三方库:

# 遍历全量节点构建 子节点->父节点 的映射关系
parent_map = {child: parent for parent in root.iter() for child in parent}

# 假设已经拿到了匹配的tag元素
tag_element = root.find('.//node/tag[@v="traffic_signals"]')
# 直接从映射表取对应的父node即可
target_node = parent_map[tag_element]

内容的提问来源于stack exchange,提问作者icanfast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:39:24