Python ElementTree中如何获取XML元素的点分隔全路径?
解决方法
核心思路是从目标元素向上遍历所有父级节点,收集标签后反转拼接即可,分两种适用场景:
Python 3.9+ 版本(推荐)
3.9及以上版本的xml.etree.ElementTree内置了iterancestors()方法可以直接遍历元素的所有祖先节点,代码如下:
def get_full_path(element): tags = [element.tag] for parent in element.iterancestors(): tags.append(parent.tag) return '.'.join(reversed(tags)) # 调用方法即可得到目标路径 full_path = get_full_path(index) print(full_path) # 输出:markets.us.summary.index
低版本Python兼容方案
低版本没有iterancestors()方法,需要在解析XML时手动为所有元素添加父节点引用:
import xml.etree.ElementTree as ET # 解析XML并为所有元素绑定parent属性 tree = ET.parse('markets.xml') root = tree.getroot() for parent in root.iter(): for child in parent: child.parent = parent def get_full_path(element): tags = [element.tag] current = element while hasattr(current, 'parent'): current = current.parent tags.append(current.tag) return '.'.join(reversed(tags)) full_path = get_full_path(index)
命名空间处理补充
如果XML包含命名空间(比如示例中的cap:change元素),默认获取的标签会带上命名空间标识如{URI}change,如果不需要可以对tag做裁剪,将代码中获取tag的逻辑替换为:
tag = ele.tag.split('}', 1)[-1] if '}' in ele.tag else ele.tag
内容的提问来源于stack exchange,提问作者rez
相关产品推荐
相关产品推荐

