Чтение escape-символов с XMLStreamReader - PullRequest
4 голосов
/ 30 мая 2010

Привет! У меня проблема с чтением escape-символов внутри xml с использованием XMLStreamReader .

например, у меня есть этот элемент:

<a>foo&amp;bar</a>

и когда я читаю значение, все после &amp; усекается, и полученное значение равно "foo"

Есть идеи, как это можно исправить?

Ответы [ 2 ]

14 голосов
/ 30 ноября 2011

Чтобы заставить XMLStreamReader возвращать одну строку, необходимо установить свойство javax.xml.stream.isCoalescing, как указано в документации XMLStreamReader # next () :

XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty("javax.xml.stream.isCoalescing", true);  // decode entities into one string
XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(stringReader);
5 голосов
/ 31 мая 2010

Я не уверен, в чем проблема - мой тест дает ожидаемые результаты.

Запуск

XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader reader = xmlInputFactory.createXMLStreamReader(
     new StringReader("<tag>foo&amp;bar</tag>"));
PrintWriter pw = new PrintWriter(System.out, true);
while (reader.hasNext())
{
    reader.next();
    pw.print(reader.getEventType());
    if (reader.hasText())
        pw.append(' ').append(reader.getText());
    pw.println();
}

Производит

1
4 foo
4 &
4 bar
2
8

На JDK 1.6.0.11 - довольно старый, я знаю. Я обновлю и отправлю обратно, если результаты будут отличаться.

Следует иметь в виду, что XMLStreamReader может (и делает!) Разбивать символьные данные на несколько блоков, как вы видите выше - повторяющиеся 4 события (4 = CHARACTERS) указывают на то, что текст элемента отправлено как 3 события.

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