我从外部源接收xml字符串,该外部源可能包含未清理的用户贡献的内容。
下面的xml字符串在cElementTree中提供了一个ParseError
>>> print repr(s)
'<Comment>dddddddd\x08\x08\x08\x08\x08\x08_____</Comment>'
>>> import xml.etree.cElementTree as ET
>>> ET.XML(s)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
ET.XML(s)
File "<string>", line 106, in XML
ParseError: not well-formed (invalid token): line 1, column 17有没有办法让cElementTree不抱怨呢?
发布于 2012-10-24 17:25:12
它似乎在抱怨\x08,你需要避开它。
编辑:
或者,您可以使用recover让解析器忽略错误
from lxml import etree
parser = etree.XMLParser(recover=True)
etree.fromstring(xmlstring, parser=parser)发布于 2013-11-26 06:24:57
我也遇到了同样的错误(对于ElementTree)。在我的例子中,这是因为编码,我能够在不使用外部库的情况下解决它。希望这能帮助其他人根据标题找到这个问题。(reference)
import xml.etree.ElementTree as ET
parser = ET.XMLParser(encoding="utf-8")
tree = ET.fromstring(xmlstring, parser=parser)EDIT:根据评论,这个答案可能已经过时了。但当它被回答时,这确实起到了作用...
发布于 2012-10-24 17:35:27
请参阅另一个问题的this answer和XML规范的according part。
退格符U+0008是XML文档中的无效字符。它必须表示为转义实体,并且不能简单地出现。
如果需要处理此XML片段,则必须在将其提供给XML解析器之前替换s中的\x08。
https://stackoverflow.com/questions/13046240
复制相似问题