Требуется CDATA событие, уведомляющее Stax Parser для Java - PullRequest
5 голосов
/ 21 декабря 2011

Я взял на себя обслуживание приложения, которое использует анализатор stax для разбиения XML-файла, состоящего из множества записей, на отдельные записи для дальнейшей обработки. Использование такого типа синтаксического анализатора для этой цели, на мой взгляд, излишне, но я его не писал.

Приложение теперь сталкивается с такими данными, как:

<name><![CDATA[A & B]]></name>

Наш текущий анализатор возвращает событие для начального тега name. Следующее событие - это символьное событие со значением «A & B».

С веб-страницы Sun я нашел это:


Отчет о событиях CDATA Javax.xml.stream.XMLStreamReader, реализованный в потоковом анализаторе XML, не сообщает о событиях CDATA. Если у вас есть приложение, которое должно получать такие события, настройте XMLInputFactory, чтобы установить следующее специфичное для реализации свойство report-cdata-event:

XMLInputFactory factory = XMLInptuFactory.newInstance();
factory.setProperty("report-cdata-event", Boolean.TRUE);

Используемый нами анализатор не поддерживает свойство 'report-cdata-event'.

Я хочу найти анализатор, который сообщит о таком событии, поэтому мне не нужно проверять каждый фрагмент текста на наличие символов, которые должны быть защищены конструкцией CDATA.

UPDATE:

После публикации я просмотрел некоторые связанные вопросы, и там было упоминание о свойстве isCoalescing; для записи устанавливается значение ЛОЖЬ.

Ответы [ 2 ]

8 голосов
/ 13 марта 2014

Правильное свойство: "http://java.sun.com/xml/stream/properties/report-cdata-event". Для свойства XMLInputFactory.IS_COALESCING должно быть задано значение false (настройка по умолчанию).

Если эти условия выполняются, оно работает нормально (протестировано с Oracle Java7u51).

1 голос
/ 21 декабря 2011

Уверен, что Woodstox должен справиться с этим.

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