2013-08-23 4 views
3

Мне нужно разобрать кусок xml, который я получаю без корневого элемента, разделение пространства имен и объявление сущности, несмотря на включение всех трех.
До сих пор я использовал Dom4j и делал некоторую обертку вокруг контента, но новые темы и пространства имен сохраняются, и DTD/Schema контента недоступен.Ошибка толерантного анализатора java xml

Учитывая, что я не контролирую источник, из которого я получаю XML, Есть ли какой-либо вид java XML parser, который будет терпеть эти ошибки?

  1. Наедине корневого элемента

  2. несвязанные пространств имен

  3. Необъявленные лица

+2

Правильное решение вашей проблемы будет обратиться к этому источнику и попросить их, чтобы соответствовать стандартам. Независимо от того, что они дают вам, это не XML. Если TagSoup выйдет из строя, вы можете написать собственный парсер. Проверьте [ANTLR4] (http://www.antlr.org/wiki/display/ANTLR4/Home) генератор парсера. Это [справочник] (http://pragprog.com/book/tpantlr2/the-definitive-antlr-4-reference) содержит примеры синтаксического анализа XML. – predi

+0

XML не требует объявления пространства имен. – Raedwald

+0

Но данные xml, которыми я управляю, используют пространства имен – Chedy2149

ответ

2

Вы можете попробовать использовать TagSoup, который является "щадящие" много ошибок в разметке.

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

+0

Сохраняет привязку пространства имен и проблему объявления сущностей. – Chedy2149

+1

TagSoup просто подавляет все пространства имен. Он также поддерживает уже 2000+. –

+0

TagSoup кажется интересным, но как его использовать? Любые учебники? Кроме того, он имеет возможность запросов (xPath)? – Chedy2149

0

Я думаю, что все основные Java-парсеры Java имеют такие строгие требования, как корневой элемент. Простой способ обойти это - написать собственный Java-парсер Java. Если вы используете XML только как файл конфигурации, я предлагаю вам изучить использование свойств Java.

Спасибо, Reece

+0

Спасибо, но xml используется для хранения данных приложения. – Chedy2149

+0

Хорошо, в этом случае попробуйте сделать свой собственный XML-парсер (метод .split() - ваш друг, если вы хотите, чтобы это было сделано быстро) или изменить базу данных, которая может хранить файлы приложений и данные намного быстрее, чем XML. –

+0

Они должны быть строгими * для XML-парсеров *. Если текст не соответствует определению XML, это не XML *. – Raedwald

Смежные вопросы