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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:25:27