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

时间:2011-12-21 14:46:13

标签: java xml-parsing cdata stax

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

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

<name><![CDATA[A & B]]></name>

我们当前的解析器返回begin'name'标记的事件。 下一个事件是一个字符事件,其值为'A&amp; 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);

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

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

更新:

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

非常确定Woodstox应该处理它。