我已经接管了一个应用程序的维护,该应用程序使用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。
答案 0 :(得分:8)
正确的属性是:“http://java.sun.com/xml/stream/properties/report-cdata-event”。 必须将属性XMLInputFactory.IS_COALESCING设置为false(默认设置)。
如果满足这些条件,它可以正常工作(使用Oracle Java 7u51进行测试)。
答案 1 :(得分:1)
非常确定Woodstox应该处理它。