【发布时间】:2020-02-20 00:42:55
【问题描述】:
我正在使用 Python 3 从 API 检索数据,但在从检索到的字符串中解析一些 XML 文档时遇到问题。
我已经确定了导致此问题的特定字符串:
from xml.etree import ElementTree
bad_string = '<tag>Sample ‘cp 99-3a’</tag>'
ElementTree.fromstring(bad_string)
这是停止脚本的返回错误:
ParseError: not well-formed (invalid token): line 1, column 31
我尝试使用以下解决方案来解决它,结果与以前相同
ElementTree.fromstring('<tag>Sample ‘cp 99-3a’</tag>'.encode('ascii', 'ignore'))
如何在不应用一个特定的正则表达式来处理其他类似字符串的情况下清理此字符串?
编辑:既然@b_c 和@mzjn 解释了我的问题是非转义字符,我找到了一种可能的解决方案 (Escape unescaped characters in XML with Python)
ElementTree.fromstring('<tag>&Sample ‘cp 99-3a’</tag>', parser = etree.XMLParser(recover = True))
【问题讨论】:
-
&#x92是问题所在。如果它的末尾有一个分号 (&#x92;),它将是一个正确的数字字符引用。见en.wikipedia.org/wiki/…。
标签: python xml-parsing