如何解析XML后获取原文件指定的XML标签名(不转换命名空间)
解决ElementTree解析XML后还原带前缀标签名的问题
ElementTree解析XML时,会将带命名空间前缀的标签转换为{命名空间URI}标签名的格式存储。要还原成原文件中的前缀:标签名形式,可按以下步骤实现:
实现步骤
- 从目标元素的
tag属性中拆分出命名空间URI和本地标签名 - 从根元素的命名空间映射(
nsmap)中找到对应URI的前缀 - 将前缀与本地标签名拼接成原格式
示例代码
import xml.etree.ElementTree as ElementTree a = """ <actors xmlns:fictional="http://characters.example.com"> <actor> <name>Eric Idle</name> <fictional:character>Sir Robin</fictional:character> <fictional:character>Gunther</fictional:character> <fictional:character>Commander Clement</fictional:character> </actor> </actors> """ root = ElementTree.fromstring(a) elem = root[0][1] # 目标元素:<fictional:character>Sir Robin</fictional:character> # 拆分命名空间URI和本地标签名 if '}' in elem.tag: namespace_uri, local_tag = elem.tag.split('}', 1) namespace_uri = namespace_uri.lstrip('{') # 从根元素的nsmap中查找对应前缀 prefix = next((k for k, v in root.nsmap.items() if v == namespace_uri), None) # 拼接得到原标签名 original_tag = f"{prefix}:{local_tag}" if prefix else local_tag else: original_tag = elem.tag print(original_tag) # 输出:fictional:character
说明
root.nsmap存储了XML中定义的命名空间前缀与URI的映射关系(Python 3.2及以上版本支持)- 若元素属于默认命名空间(无前缀),则直接返回本地标签名
内容的提问来源于stack exchange,提问作者Kvarel
相关产品推荐
相关产品推荐

