使用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);