XML解析报错:格式不正确(无效令牌),如何从字符串创建XML树?
XML解析格式错误的解决方案
问题重现
原代码
import xml.etree.ElementTree as ET r="""<root nsp="suan2.0" nsp:host="1" id='%s'></root>""" %obj['value'] root = ET.fromstring(r,ET.XMLParser())
生成的XML字符串
<root nsp="suan2.0" nsp:host="1" id='newapp'></root>
报错信息
anaconda3\lib\xml\etree\ElementTree.py,line 1342,in XML parser.feed(text) xml.etree.ElementTree.ParseError:not well formed (invalid token)
问题原因
XML里带冒号的属性(比如nsp:host)中,冒号前的nsp属于命名空间前缀,必须通过xmlns:nsp="命名空间URI"的格式提前声明。原代码里的nsp="suan2.0"不是合法的命名空间声明方式,导致解析器无法识别前缀,触发格式错误。
解决方法
把原XML中的nsp="suan2.0"修改为xmlns:nsp="suan2.0",完成命名空间前缀的合法声明。
修正后的代码
import xml.etree.ElementTree as ET # 修正命名空间声明格式 r="""<root xmlns:nsp="suan2.0" nsp:host="1" id='%s'></root>""" %obj['value'] root = ET.fromstring(r,ET.XMLParser())
验证结果
修正后生成的XML字符串为:
<root xmlns:nsp="suan2.0" nsp:host="1" id='newapp'></root>
此时ElementTree可以正常解析该XML字符串,不会再抛出格式错误。
内容的提问来源于stack exchange,提问作者James Fowler
相关产品推荐
相关产品推荐

