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
相关产品推荐
相关产品推荐

