SaxParser заменяет текст при загрузке? - PullRequest
0 голосов
/ 25 июня 2011

У меня есть Java SAXparser, который загружает и анализирует, используя синтаксический анализ (новый InputSource (conn.getInputStream ())).К сожалению, иногда выдает ошибку при загрузке xml сайта: «XML или текстовое объявление не в начале объекта». Очевидно, это плохой xml, объявление должно быть первым:

<!DOCTYPE ... stuff here ...>
<?xml  ... stuff here ...?>

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

Ответы [ 2 ]

1 голос
/ 25 июня 2011

Простое решение : прочитайте первую строку из потока, используя эти байты, а затем передайте ее парсеру.

Правильное Java-решение : создайте интерфейс промежуточного потока, который оборачивает любой поток и предлагает взамен поток, совместимый с SAX-парсером. Затем создайте класс, реализующий этот интерфейс специально для вашего случая.

Таким образом, вы можете обнаружить проблемный заголовок еще до того, как он достигнет SAX-парсера.

Редактировать : Я бы просто использовал парсер XML Apache commons или парсер DOM вместо SAX. Кроме того, если ваш XML не является действительно длинным, нет большой разницы в его анализе во время или после загрузки.

1 голос
/ 25 июня 2011

Посмотрите на Jsoup .Это может иметь дело с неправильно отформатированным XML.

...