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

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

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

Есть ли какой-либо путь вокруг этого? Я должен буду очистить XML-файл, прежде чем я передам его к Синтаксическому анализатору SAX? Если так, есть ли изящный способ идти об этом?

18
задан Epaga 8 June 2010 в 12:33
поделиться

3 ответа

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

24
ответ дан 30 November 2019 в 07:44
поделиться

Боюсь, вам придется почистить ваш XML. Такие символы недопустимы согласно спецификации XML, и никакие уговоры не убедят парсер в обратном.

Допустимые символы XML для XML 1. 0:

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

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

7
ответ дан 30 November 2019 в 07:44
поделиться

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

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

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

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

2
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: