当尝试使用
之类的字符引用解析不正确的XML时,Java的SAX Parser因致命错误而死亡,例如
org.xml.sax.SAXParseException: Character reference ""
is an invalid XML character.
这有什么办法吗?在将其交给SAX Parser之前,我是否必须清理XML文件?如果是这样,有没有一种优雅的方式来解决这个问题?
答案 0 :(得分:23)
使用XML 1.1! skaffman是完全正确的,但你可以将<?xml version="1.1"?>
放在文件的顶部,你就会处于良好的状态。如果您正在处理流,请编写一个重写或添加该处理指令的包装器。
答案 1 :(得分:7)
我担心你必须清理你的XML。根据XML规范,这些字符是无效的,否则没有多少说服力会说服解析器。
对于XML 1.0U+0009
U+000A
U+000D
U+0020
- U+D7FF
U+E000
- U+FFFD
U+10000
- U+10FFFF
为了清理,您必须通过更低级别的处理器传递数据,该处理器将其视为unicode字符流,删除那些无效的字符。
答案 2 :(得分:2)
这是无效的XML,因此解析器不应该在没有错误的情况下对其进行解析。
但是你确实在现实世界中遇到过这样的手工制作的无效XML。我的解决方案是手动将CDATA标记插入数据。例如,
<data><![CDATA[ garbage with &invalid characters ]]></data>
当然,您将按原样获取数据,并且您必须自己处理无效字符。