【问题标题】:Need a CDATA event notifying stax parser for java需要一个 CDATA 事件通知 java 的 stax 解析器
【发布时间】:2012-01-25 08:56:32
【问题描述】:

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

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

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

我们当前的解析器为开始'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。

【问题讨论】:

    标签: java xml-parsing cdata stax


    【解决方案1】:

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

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

    【讨论】:

    • 实际上是两个常量Constants.ZEPHYR_PROPERTY_PREFIX + Constants.STAX_REPORT_CDATA_EVENT 的串联。其中常量为com.sun.org.apache.xerces.internal.impl.Constants
    【解决方案2】:

    很确定 Woodstox 应该会处理这个问题。

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 2010-11-05
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多