Python使用xml.etree解析XML字符串返回空列表与None attrib问题
问题原因与解决方案
核心原因
你遇到的不是XML解析失败,是命名空间处理和查询路径书写错误导致的查询结果为空,相关细节如下:
- 你的XML定义了默认命名空间:根节点的
xmlns="http://www.nexacroplatform.com/platform/dataset"属性声明了该XML下所有未显式指定命名空间的节点,都属于这个命名空间。ElementTree解析时会自动给所有节点标签加上命名空间标识,也就是你看到的{http://www.nexacroplatform.com/platform/dataset}Root格式,这是正常解析后的结果,不是异常。 - 你的查询路径错误:
tree是Root节点对象,Parameter节点是Root下Parameters节点的子节点,不是Root的直接子节点,直接写findall('Parameter')不可能匹配到对应节点。 - 你提到的Root节点attrib为空是正常现象:
xmlns属于命名空间声明,不属于节点的普通自定义属性,Root节点本身没有其他属性,所以attrib为空不属于解析错误。
解决方案
步骤1:声明命名空间映射
给你的默认命名空间定义一个别名,方便查询时使用:
ns = { 'ds': 'http://www.nexacroplatform.com/platform/dataset' }
别名可以自定义,只要和查询时的前缀保持一致即可。
步骤2:使用带命名空间的完整路径查询
# 匹配所有Parameter节点 params = tree.findall('ds:Parameters/ds:Parameter', ns) # 测试输出节点内容 for p in params: print(f"id: {p.get('id')}, 值: {p.text}")
运行后就能正常拿到所有Parameter节点的内容。
内容的提问来源于stack exchange,提问作者Haru Jeong
相关产品推荐
相关产品推荐

