При попытке проанализировать неправильный XML с символьной ссылкой такой как 
, Синтаксический анализатор SAX Java умирает ужасной смертью с фатальной ошибкой такой как
org.xml.sax.SAXParseException: Character reference ""
is an invalid XML character.
Есть ли какой-либо путь вокруг этого? Я должен буду очистить XML-файл, прежде чем я передам его к Синтаксическому анализатору SAX? Если так, есть ли изящный способ идти об этом?
Используйте XML 1.1! skaffman совершенно прав, но вы можете просто вставить в начало ваших файлов, и вы будете в хорошей форме. Если вы имеете дело с потоками, напишите обертку, которая перепишет или добавит эту инструкцию обработки.
Боюсь, вам придется почистить ваш XML. Такие символы недопустимы согласно спецификации XML, и никакие уговоры не убедят парсер в обратном.
Допустимые символы XML для XML 1. 0:
U+0009
U+000A
U+000D
U+0020
- U+D7FF
U+E000
- U+FFD
U+10000
- U+10FFFF
Для того чтобы навести порядок, вам придется пропустить данные через более низкоуровневый процессор, который будет рассматривать их как поток символов Юникода, удаляя те символы, которые являются недопустимыми.
Это недопустимый XML, поэтому ни один парсер не должен разбирать его без ошибок.
Но в реальном мире можно встретить такой недопустимый XML, созданный вручную. Мое решение - вручную вставлять в данные маркеры CDATA. Например,
<data><![CDATA[ garbage with &invalid characters ]]></data>
Конечно, вы получите данные как есть, и вам придется самостоятельно разбираться с недопустимыми символами.