使用XMLStreamReader读取转义字符

时间:2010-05-30 11:27:46

标签: java xml

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

例如我有这个元素:

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

当我读取值时,&amp;之后的所有内容都被截断,而我得到的值是“foo”

任何想法如何解决?

2 个答案:

答案 0 :(得分:14)

要强制XMLStreamReader返回单个字符串,您必须设置XMLStreamReader#next() documentation指示的javax.xml.stream.isCoalescing属性:

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

答案 1 :(得分:5)

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

运行

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