Очистка плохого XML в Java - PullRequest
7 голосов
/ 28 октября 2008

Я использую стороннюю библиотеку, которая возвращает недопустимый «XML», поскольку он содержит недопустимые символы, а также необъявленные сущности. Мне нужно использовать синтаксический анализатор Java XML для разбора этого XML, но он задыхается.

Существует ли общий способ очистки этого XML, чтобы он стал действительным?

Ответы [ 4 ]

6 голосов
/ 28 октября 2008

Я думаю, что ваши варианты что-то вроде:

Первые два более тяжелые, учитывая, что они предназначены для анализа плохо сформированного HTML. Если вы знаете, что проблемы связаны с кодировкой и сущностями, но в остальном правильно сформированы, я бы посоветовал вам сделать свою собственную:

  • стандартизировать кодировку в UTF-8
  • использовать стандартный кодировщик для текста между символами> и <(текстовые объекты). </li>
3 голосов
/ 28 октября 2008

Похоже, вам нужно выяснить, есть ли способ автоматически очистить данные перед передачей анализатору. Как определенные символы недопустимы, недопустимы в объявленном наборе символов или неэкранированных метасимволах XML, таких как '<'? </p>

Для необъявленных сущностей я однажды решил эту проблему, настроив парсер SAX с обработчиком ошибок, который в основном игнорировал эти ошибки. Это может помочь вам тоже. См. ErrorHandler API.

1 голос
/ 28 октября 2008

Попробуйте http://jtidy.sourceforge.net/.

0 голосов
/ 26 мая 2009

Для недопустимых символов я бы порекомендовал реализовать фильтрацию Reader; просто конвертируйте их (предполагая, что это управляющие символы) с пробелом или вычеркните.

Необъявленные сущности хитрее; некоторые xml-анализаторы позволяют вам определять альтернативный DTD для использования ( Woodstox делает по крайней мере. Если это так, вы можете внедрить DTD, который объявляет нужные вам объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...