Я не уверен, в чем проблема - мой тест дает ожидаемые результаты.
Запуск
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader reader = xmlInputFactory.createXMLStreamReader(
new StringReader("<tag>foo&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 события.