需要一个CDATA事件通知stax解析器的java

use*_*046 5 java stax cdata xml-parsing

我接管了一个使用stax解析器的应用程序的维护,将许多记录的XML文件分解为单个记录以供进一步处理.为此目的使用这种类型的解析器在我看来是过度的,但我没有写它.

该应用程序现在遇到如下数据:

<name><![CDATA[A & B]]></name>
Run Code Online (Sandbox Code Playgroud)

我们当前的解析器返回begin'name'标记的事件.下一个事件是值为'A&B'的字符事件.

从Sun的网页上我发现了这个:


报告CDATA事件Streaming XML Parser中实现的javax.xml.stream.XMLStreamReader不报告CDATA事件.如果您的应用程序需要接收此类事件,请配置XMLInputFactory以设置以下特定于实现的report-cdata-event属性:

XMLInputFactory factory = XMLInptuFactory.newInstance();
factory.setProperty("report-cdata-event", Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)

我们使用的解析器不支持'report-cdata-event'属性.

我想找到一个报告这样一个事件的解析器,这样我就不必检查需要由CDATA构造保护的字符的每一段文本.

更新:

发布后我浏览了一些相关的问题,并提到'isCoalescing'属性; 记录它被设置为FALSE.

rmu*_*ler 8

正确的属性是:" http://java.sun.com/xml/stream/properties/report-cdata-event ".必须将属性XMLInputFactory.IS_COALESCING设置为false(默认设置).

如果满足这些条件,它可以正常工作(使用Oracle Java 7u51测试).


ksc*_*eid 1

很肯定伍德斯托克斯应该处理这个问题。