java - Stax 将 Text+CDATA+Text 视为单个 CHARACTERS 部分

标签 java xml cdata stax woodstox

使用 Stax,我惊讶地发现一个 XML block ,例如:

<badger>
    <![CDATA[Text about a badger]]>
</badger>

被视为:

START_ELEMENT (badger)
CHARACTERS (        Text about a badger    )
END_ELEMENT (badger)

也就是说,CDATA 和周围的文本被展平为一个文本元素。未检测到 CDATA 元素。

这是正确的行为吗?如何将空格与 CDATA 分开?

我正在使用 woodstox 实现。

最佳答案

我怀疑您将属性“XMLInputFactory.IS_COALESCING”设置为 true(或者,正在使用默认启用它的 Woodstox 3.2——这不是默认的 stax 规范建议的,即是一个小错误)。这会强制将 CDATA 转换为字符,并合并相邻的文本段(如果有)。

除此之外,Woodstox 确实将 CDATA 部分报告为不同的部分;但 Stax 规范对转换有一些“有趣”的要求——专家组成员似乎不喜欢 CDATA 的处理方式与 CHARACTERS 有任何不同。

因此:如果您确实想让它们单独报告,请确保禁用 IS_COALESCING:

inputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);

关于java - Stax 将 Text+CDATA+Text 视为单个 CHARACTERS 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356574/

相关文章:

java - JVM CodeCache 区域中存储了哪些编译后的代码

java - 私有(private)嵌套类是否是静态的有关系吗?

xml - 验证XPath表达式

javascript - XMLHttpRequest 无法加载。?

python - 避免在 STYLE 组件中使用 CDATA 标签

xml - XML 规范是否规定解析器需要始终将\n\r 转换为\n,即使\n\r 出现在 CDATA 部分中?

java - un 使用java转义特殊字符

java - createTempFile 工作正常,现在权限被拒绝

php - 使用 phpQuery 选择特殊的 XML 标签

html - 在 ActionView::Base.full_sanitizer 中允许 CDATA