我尝试通过xml.sax.handler.ContentHandler
子类解析XML文件。解析器在以下行失败:
<desc>some_text</desc>
我收到以下错误:
xml.sax._exceptions.SAXParseException: test.xml:687338:17: reference to invalid character number
规范(http://www.w3.org/TR/xml/#sec-references)表示字符
和
有效。那么解析器中是否存在错误或者我做错了什么?
答案 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的过程。