使用Python LXML的findall匹配元素后,如何获取元素路径?
在LXML中获取匹配XML元素的路径
要获取lxml中匹配到的XML元素的路径,直接用元素对象的getpath()方法就行,这个方法会返回该元素从根节点开始的完整XPath路径。另外注意你原代码里的XPath有个语法问题:.//ns:COMPU-METHOD/[ns:CATEGORY='TEXTTABLE']多了个斜杠,应该改成.//ns:COMPU-METHOD[ns:CATEGORY='TEXTTABLE']才能正确匹配。
修改后的完整代码如下:
from lxml import etree as et tree = et.parse(inputFile) root = tree.getroot() # 修正XPath的语法错误 items = root.findall(".//ns:COMPU-METHOD[ns:CATEGORY='TEXTTABLE']", ns) for enums in items: enumName = enums.find('ns:SHORT-NAME', ns).text # 获取元素的完整XPath路径 path = enums.getpath() # 可按需打印或使用路径 print(f"元素名称: {enumName}, 路径: {path}")
如果需要去掉路径里的命名空间前缀(比如把/ns:A/ns:B简化为/A/B),可以自己写个简单的处理函数:
def get_path_without_namespace(element, ns_map): path = element.getpath() # 替换掉所有命名空间前缀(这里默认取第一个命名空间的前缀) prefix = next(iter(ns_map.keys())) return path.replace(f"{prefix}:", "")
然后在循环里替换为:
path = get_path_without_namespace(enums, ns)
内容的提问来源于stack exchange,提问作者Szabolcs
相关产品推荐
相关产品推荐

