Как сказать Java SAX Parser игнорировать недопустимые ссылки на символы?
При попытке проанализировать неправильный XML с символьной ссылкой, такой как 
, Java SAX Parser умирает ужасной смертью с фатальной ошибкой, такой как
org.xml.sax.SAXParseException: Character reference ""
is an invalid XML character.
Есть ли способ обойти это? Должен ли я очистить XML файл, прежде чем передать его в SAX Parser? Если это так, есть ли элегантный способ обойти это?
Ответы
Ответ 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>
Конечно, вы получите данные обратно, как есть, и вам придется иметь дело с недопустимыми символами.