我接管了一个使用stax解析器的应用程序的维护,将许多记录的XML文件分解为单个记录以供进一步处理 . 为此目的使用这种类型的解析器在我看来是过度的,但我没有写它 .
该应用程序现在遇到如下数据:
<name><![CDATA[A & B]]></name>
我们当前的解析器返回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);
我们使用的解析器不支持'report-cdata-event'属性 .
我想找到一个报告这样一个事件的解析器,这样我就不必检查需要由CDATA构造保护的字符的每一段文本 .
更新:
发布后我浏览了一些相关的问题,并提到'isCoalescing'属性;记录它被设置为FALSE .
2 回答
非常确定Woodstox应该处理 .
正确的属性是:“http://java.sun.com/xml/stream/properties/report-cdata-event” . 必须将属性XMLInputFactory.IS_COALESCING设置为false(默认设置) .
如果满足这些条件,它可以正常工作(使用Oracle Java 7u51测试) .