使用XMLStreamReader读取转义字符

嗨,我在使用XMLStreamReader读取xml中的转义字符时遇到问题。

例如,我有这个元素:

foo&bar 

当我读到价值时,一切都在& 被截断,我得到的值是“foo”

任何想法如何解决?

我不确定问题是什么 – 我的测试会产生你期望的结果。

运行

 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(); } 

产生

 1 4 foo 4 & 4 bar 2 8 

在JDK 1.6.0.11上 – 相当陈旧我知道。 如果结果不同,我会升级并回发。

要记住的一件事是XMLStreamReader可以(并且确实!)将字符数据分成几个块,如上所示 – 重复的4个事件(4 = CHARACTERS)表示元素的文本作为3个事件发送。

要强制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);