Python XML ElementTree无法读取含&的节点问题求助
问题原因及解决方案
问题本质
XML规范明确要求特殊字符(&、<、>、"、')必须转义,其中&必须写成&。你的XML文件中存在未转义的&(比如JAMES&001),直接违反了XML格式规则,导致ElementTree解析时触发格式错误。
修复方法
分两种场景处理:
1. 直接修改源XML文件
用文本编辑器打开XML文件,将所有未转义的&替换为&。注意不要替换已经转义的合法实体(比如&、<等),可以用正则查找替换:
- 查找规则:
&(?!amp;|lt;|gt;|quot;|apos;) - 替换为:
&
2. Python读取时预处理(无法修改源文件时)
先读取文件内容,预处理修复未转义的&,再解析XML:
import xml.etree.ElementTree as et import re # 读取原始XML内容 with open("your_file.xml", 'r', encoding='utf-8') as f: xml_content = f.read() # 替换未转义的&,保留合法的XML实体 fixed_xml = re.sub(r'&(?!amp;|lt;|gt;|quot;|apos;)', r'&', xml_content) # 解析修复后的XML root = et.fromstring(fixed_xml) ids = root.findall("uid")
注意事项
如果你的XML中包含自定义实体(比如&my_entity;),上述正则会误替换这类实体的&,此时需要调整正则规则,或者先在XML中定义自定义实体再进行解析。
内容的提问来源于stack exchange,提问作者chhibbz
相关产品推荐
相关产品推荐

