如何告诉Java SAX解析器忽略无效的字符引用?

2022-09-02 09:25:52

当尝试使用字符引用(例如,Java的SAX解析器)解析不正确的XML时,会因致命错误而死亡,例如&#x1

    org.xml.sax.SAXParseException: Character reference "&#x1"
                                   is an invalid XML character.

有什么办法可以解决这个问题吗?在将 XML 文件移交给 SAX 解析器之前,我是否必须对其进行清理?如果是这样,有没有一种优雅的方法来解决这个问题?


答案 1

使用 XML 1.1!skaffman是完全正确的,但你可以贴在文件的顶部,你就会处于良好的状态。如果您正在处理流,请编写一个重写或添加该处理指令的包装器。<?xml version="1.1"?>


答案 2

恐怕你将不得不清理你的XML。根据 XML 规范,此类字符是无效的,否则任何说服都不会说服解析器。

XML 1.0 的有效 XML 字符:

  • U+0009
  • U+000A
  • U+000D
  • U+0020U+D7FF
  • U+E000U+FFFD
  • U+10000U+10FFFF

为了进行清理,您必须通过更低级的处理器传递数据,该处理器将其视为 Unicode 字符流,删除那些无效的字符。


推荐