How to tell Java SAX Parser to ignore invalid char

2019-04-03 18:04发布

When trying to parse incorrect XML with a character reference such as &#x1, Java's SAX Parser dies a horrible death with a fatal error such as

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

Is there any way around this? Will I have to clean up the XML file before I hand it off to the SAX Parser? If so, is there an elegant way of going about this?

3条回答
仙女界的扛把子
2楼-- · 2019-04-03 18:08

Use XML 1.1! skaffman is completely right, but you can just stick <?xml version="1.1"?> on the top of your files and you'll be in good shape. If you're dealing with streams, write a wrapper that rewrites or adds that processing instruction.

查看更多
【Aperson】
3楼-- · 2019-04-03 18:08

You're going to have to clean up your XML, I'm afraid. Such characters are invalid according to the XML spec, and no amount of persuasion is going to convince the parser otherwise.

Valid XML characters for XML 1.0:

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

In order to clean up, you'll have to pass the data through a more low-level processor, which treats it as a unicode character stream, removing those characters that are invalid.

查看更多
forever°为你锁心
4楼-- · 2019-04-03 18:13

This is invalid XML so no parser should parse it without error.

But you do encounter such hand-crafted invalid XML in real world. My solution is to manually insert CDATA markers to the data. For example,

  <data><![CDATA[ garbage with &invalid characters ]]></data>

Of course, you will get the data back as is and you have to deal with the invalid characters yourself.

查看更多
登录 后发表回答