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