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

如何使用LXML查找XML中所有类似xi:something的自定义标签

用LXML查找XML中所有xi:something标签的方法

嘿,我来帮你搞定这个问题!要查找XML里所有带xi:前缀的something标签,核心是处理好XML的命名空间——LXML对带前缀的元素查找有严格的命名空间要求,下面是具体步骤:

步骤1:导入LXML并解析你的XML

首先导入lxml.etree模块,然后加载你提供的XML内容(我帮你补全了片段):

from lxml import etree

# 你的XML内容
xml_content = """
<sample>
    <sample1>
        <xi:something href="sample.html" tags="something"/>
        <xi:something href="sample.html" tags="something"/>
        <xi:something href="sample.html" tags="something"/>
        <xi:something href="sample.html" tags="something"/>
    </sample1>
    <sample2>
        <xi:something href="sample.html" tags="something"/>
        <xi:something href="sample.html" tags="something"/>
        <xi:something href="sample.html" tags="something"/>
        <xi:something href="sample.html" tags="something"/>
    </sample2>
</sample>
"""

# 解析XML字符串(如果是文件可以用etree.parse())
tree = etree.fromstring(xml_content)

步骤2:指定命名空间并执行查询

xi是命名空间前缀,通常它对应XInclude的标准命名空间http://www.w3.org/2001/XInclude。我们需要定义命名空间映射,再用XPath查找所有匹配的元素:

# 定义命名空间映射字典
namespaces = {'xi': 'http://www.w3.org/2001/XInclude'}

# 用XPath查找所有层级的xi:something元素
all_xi_elements = tree.xpath('//xi:something', namespaces=namespaces)

# 遍历结果,查看元素属性
for elem in all_xi_elements:
    print(f"找到元素:href={elem.get('href')}, tags={elem.get('tags')}")

更灵活的方式:自动提取命名空间

如果你的XML里xi前缀对应的是自定义命名空间(不是标准XInclude),可以直接从XML根元素的命名空间映射中提取,不用硬编码URI:

# 从解析后的XML根元素获取命名空间映射
root_ns = tree.nsmap

if 'xi' in root_ns:
    # 用自动获取的命名空间URI查询
    all_xi_elements = tree.xpath('//xi:something', namespaces={'xi': root_ns['xi']})
    # 后续处理逻辑...
else:
    print("XML文档中没有定义xi命名空间前缀哦")

小提示

  • XPath里的//表示查找所有层级的xi:something元素,如果你只想找特定父节点下的,比如sample1里的,可以把路径改成/sample/sample1/xi:something。
  • 一定要传namespaces参数:LXML不会自动识别前缀对应的命名空间,必须明确告诉它前缀和URI的对应关系,否则会找不到元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:22:48