2010-05-30 127 views
3

您好我在使用XMLStreamReader读取xml中的转义字符时出现问题。使用XMLStreamReader读取转义字符

比如我有这样的元素:

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

,当我读出的值,在&amp;后一切都被截断,我得到的值是“富”

任何想法如何可能被修复?

+0

小运行的例子... – 2010-05-30 12:36:03

回答

3

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

运行

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个事件。

12

要强制XMLStreamReader的返回一个字符串,你必须设置javax.xml.stream.isCoalescing属性由XMLStreamReader#next() documentation所示:用样品输入

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

您可以使用常数财产如[XMLInputFactory](https://docs.oracle.com/javase/8/docs/api/javax/xml/stream/XMLInputFactory.html#IS_COALESCING)中所定义。 – turtlesallthewaydown 2015-12-17 12:00:29