Java 使用XMLStreamReader读取转义字符

Java 使用XMLStreamReader读取转义字符,java,xml,Java,Xml,您好,我在使用读取xml中的转义字符时遇到问题 例如,我有以下元素: <a>foo&amp;bar</a> foo&;酒吧 当我读取值时,之后的所有内容被截断,我得到的值是“foo” 有没有办法解决这个问题?我不确定问题出在哪里-我的测试产生了你期望的结果 运行 XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLStreamReader reader = xmlInpu

您好,我在使用读取xml中的转义字符时遇到问题

例如,我有以下元素:

<a>foo&amp;bar</a>
foo&;酒吧
当我读取值时,
之后的所有内容被截断,我得到的值是“foo”


有没有办法解决这个问题?

我不确定问题出在哪里-我的测试产生了你期望的结果

运行

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();
}
在JDK1.6.0.11上——我知道它已经很老了。如果结果不同,我会升级并发回


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

要强制XMLStreamReader返回单个字符串,您必须设置
javax.xml.stream.isCoalescing
属性,如下所示:


带有示例输入的小型可运行示例…您可以使用中定义的属性常量。
1
4 foo
4 &
4 bar
2
8
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty("javax.xml.stream.isCoalescing", true);  // decode entities into one string
XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(stringReader);