Подтвердить что ты не робот

Как сказать Java SAX Parser игнорировать недопустимые ссылки на символы?

При попытке проанализировать неправильный XML с символьной ссылкой, такой как &#x1, Java SAX Parser умирает ужасной смертью с фатальной ошибкой, такой как

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

Есть ли способ обойти это? Должен ли я очистить XML файл, прежде чем передать его в SAX Parser? Если это так, есть ли элегантный способ обойти это?

4b9b3361

Ответ 1

Использовать XML 1.1! skaffman совершенно прав, но вы можете просто вставить <?xml version="1.1"?> в верхней части своих файлов, и вы будете в хорошей форме. Если вы имеете дело с потоками, напишите оболочку, которая перезаписывает или добавляет эту инструкцию обработки.

Ответ 2

Похоже, вам придется очищать свой XML. Такие символы недействительны в соответствии с спецификацией XML, и никакое убеждение не убедит анализатор иначе.

Действительные символы XML для XML 1.0:

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

Чтобы очистить, вам придется передавать данные через более низкоуровневый процессор, который обрабатывает его как поток символов в Юникоде, удаляя те недопустимые символы.

Ответ 3

Это недопустимый XML, поэтому парсер не должен анализировать его без ошибок.

Но вы сталкиваетесь с таким недействительным XML-кодом с ручной обработкой в ​​реальном мире. Мое решение состоит в том, чтобы вручную вставить метки данных CDATA. Например,

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

Конечно, вы получите данные обратно, как есть, и вам придется иметь дело с недопустимыми символами.