Lesen von Escape-Zeichen mit XMLStreamReader

Hallo, ich habe ein Problem beim Lesen von Escape-Zeichen in einem XML mit XMLStreamReader .

Zum Beispiel habe ich dieses Element:

foo&bar 

und wenn ich den Wert lese, alles nach dem & ist abgeschnitten, und der Wert, den ich bekomme, ist “foo”

Irgendwelche Ideen wie das behoben werden könnte?

Ich bin nicht sicher, was das Problem ist – mein Test produziert die Ergebnisse, die Sie erwarten.

Laufen

 XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLStreamReader reader = xmlInputFactory.createXMLStreamReader( new StringReader("foo&bar")); 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(); } 

Produziert

 1 4 foo 4 & 4 bar 2 8 

Auf JDK 1.6.0.11 – eher alt ich weiß. Ich werde upgraden und zurück posten, wenn sich die Ergebnisse unterscheiden.

XMLStreamReader dass der XMLStreamReader Zeichendaten in mehrere Blöcke XMLStreamReader kann (und dies auch tut!), Wie Sie oben sehen – die wiederholten 4 Ereignisse (4 = CHARACTERS) zeigen an, dass der Text des Elements als 3 Ereignisse gesendet wird.

Um zu erzwingen, dass XMLStreamReader eine einzelne Zeichenfolge zurückgibt, müssen Sie die Eigenschaft javax.xml.stream.isCoalescing wie in der Dokumentation XMLStreamReader # next () angegeben festlegen :

 XMLInputFactory factory = XMLInputFactory.newInstance(); factory.setProperty("javax.xml.stream.isCoalescing", true); // decode entities into one string XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(stringReader);