Python SAX解析器无法处理?字符

时间:2013-08-15 11:53:22

标签: python xml sax

我尝试通过xml.sax.handler.ContentHandler子类解析XML文件。解析器在以下行失败:

<desc>&#18;some_text&#15;</desc>

我收到以下错误:

xml.sax._exceptions.SAXParseException: test.xml:687338:17: reference to invalid character number

规范(http://www.w3.org/TR/xml/#sec-references)表示字符&#18;&#15;有效。那么解析器中是否存在错误或者我做错了什么?

2 个答案:

答案 0 :(得分:1)

虽然你可以编码这些字符,但它们仍然充其量只是“不赞成”。有关“不良”字符的列表,请参阅http://www.w3.org/TR/xml/#NT-Char。然后,请参阅this 1.1 spec as well,在某些情况下允许将某些内容添加回“限制”字符。

如果文本合法地应该能够包含这些字符,那么首先对其进行编码是明智的,例如使用base64编码。接收器因此得到格式良好的XML(对于XML 1.1,并不总是需要它,但这将使它与1.0兼容)。

之前我必须自己处理外部提供的无效XML,我无法控制发件人。这太乱了。在我的情况下,我可以依赖某些模式,因此使用正则表达式“修补”不正当行为,但这是一个黑客攻击:绝望的解决方法,而不是一个正确的解决方案。

(在我的情况下,我必须处理即使是一个XML 1.1解析器也会绊倒的东西 - 发送者只是简单的破坏,一堆perl代码使用错误的正则表达式和一些文字&lt; foo&gt;类型字符串来生成假装-XML-所以我再也没有看过。)

答案 1 :(得分:1)

Unicode代码点15和18中的字符在XML 1.1中是允许的,但在XML 1.0中不允许。

看起来你的解析器不支持XML 1.1(很多都不支持)。

您需要获取XML 1.1解析器(并确保在XML声明中说明版本=“1.1”),或者您需要修复生成格式错误的XML的过程。