首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ParseError:使用cElementTree时格式不正确(令牌无效)

ParseError:使用cElementTree时格式不正确(令牌无效)
EN

Stack Overflow用户
提问于 2012-10-24 17:18:52
回答 13查看 134.2K关注 0票数 30

我从外部源接收xml字符串,该外部源可能包含未清理的用户贡献的内容。

下面的xml字符串在cElementTree中提供了一个ParseError

代码语言:javascript
复制
>>> 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不抱怨呢?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2012-10-24 17:25:12

它似乎在抱怨\x08,你需要避开它。

编辑:

或者,您可以使用recover让解析器忽略错误

代码语言:javascript
复制
from lxml import etree
parser = etree.XMLParser(recover=True)
etree.fromstring(xmlstring, parser=parser)
票数 34
EN

Stack Overflow用户

发布于 2013-11-26 06:24:57

我也遇到了同样的错误(对于ElementTree)。在我的例子中,这是因为编码,我能够在不使用外部库的情况下解决它。希望这能帮助其他人根据标题找到这个问题。(reference)

代码语言:javascript
复制
import xml.etree.ElementTree as ET
parser = ET.XMLParser(encoding="utf-8")
tree = ET.fromstring(xmlstring, parser=parser)

EDIT:根据评论,这个答案可能已经过时了。但当它被回答时,这确实起到了作用...

票数 27
EN

Stack Overflow用户

发布于 2012-10-24 17:35:27

请参阅另一个问题的this answer和XML规范的according part

退格符U+0008是XML文档中的无效字符。它必须表示为转义实体&#8;,并且不能简单地出现。

如果需要处理此XML片段,则必须在将其提供给XML解析器之前替换s中的\x08

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13046240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档