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

ElementTree解析XML根标签时附带命名空间问题求助

解决ElementTree解析XML时获取不带命名空间的根标签名问题

嗨,这个问题我之前处理XML的时候也碰到过!ElementTree在解析带默认命名空间的XML时,确实会把命名空间URI和标签名拼接成{http://xxx}tag的格式返回,但完全不用移除根标签的属性就能拿到纯标签名,给你两个实用的方法:

方法1:字符串拆分(简单直接)

利用命名空间被{}包裹的格式特征,直接拆分字符串取最后一部分:

from xml.etree import ElementTree as ET

with open("filename.xml") as f:
    tree = ET.parse(f)
    root = tree.getroot()

# 获取不带命名空间的标签名
pure_tag = root.tag.split('}')[-1]
print(pure_tag)  # 输出: dtbook

这个方法的好处是简单粗暴,不管标签有没有带命名空间,都能正常工作——如果没有命名空间,split('}')只会得到一个元素的列表,取[-1]还是原标签名。

方法2:使用QName类(更规范)

ElementTree提供了专门处理命名空间标签的QName类,能更优雅地分离命名空间URI和本地标签名:

from xml.etree import ElementTree as ET

with open("filename.xml") as f:
    tree = ET.parse(f)
    root = tree.getroot()

qname = ET.QName(root.tag)
print(qname.localname)  # 输出: dtbook
# 还能顺便获取命名空间URI:print(qname.namespace)

这个方法更符合XML规范,适合需要同时处理命名空间的场景,语义也更清晰。

顺便说一句,根标签的属性和命名空间是完全独立的两个概念,保留属性根本不影响我们获取纯标签名,不用担心两者冲突~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:57:51