【发布时间】:2018-07-29 01:57:47
【问题描述】:
我想知道 Saxon-JS 处理包含 CDATA 元素的方式是否存在已知错误。
我有一个有效的 XSLT 3.0 和 XML 流程,其中包括从包含 CDATA 的元素中获取文本并在转换中应用 HTML 标记。我会尝试在不发布脚本的情况下提出问题。
我正在使用 Saxon-HE 9.8.0.3 并尝试使用最新的 Saxon-JS。
从 .xsl 文件转换为 .sef 文件的所有内容都有效,但从包含 CDATA 的元素中获取的文本的预期格式除外。
我有一个元素 <docText>,它只包含 <![CDATA[ ... ]]> 封闭的多行文本。
我用类似这样的方式调用模板:
<xsl:apply-templates select="ancestor::document/docText"/>
我匹配<xsl:template match="docText/text()">
对包含在变量中的<docText> 中的文本的最终操作输出如下:
<xsl:value-of select="$step9-2" disable-output-escaping="yes" />
同样,当我从 Java 的命令行中使用 Saxon-HE、XML 和 XSLT 3.0 的原始转换时,输出是正确的 HTML 标记。与 Saxon-JS 一起使用的转换脚本几乎相同,除了最初在 CDATA 部分中的文本格式外,所有逻辑都有效。文本已输出,但未格式化。
是否有任何原因导致错误可能是由于 Saxon-JS 处理 CDATA 部分的方式与 Saxon-HE 处理的方式不同?
迈克尔
【问题讨论】:
-
我想知道它是否像您想象的那样是 CDATA 部分,或者仅仅是使用
disable-output-escaping。您如何将 XSLT 3 与 Saxon-JS 一起使用,是否有任何 API 用于您序列化结果以便disable-output-escaping可以产生任何影响? -
我的 XSLT 大部分是 2.0,但我在样式表中声明了 version="3.0"。也许我应该提到我将已修改为与 Saxon-JS 一起使用的 .xsl 文件转换为带有 OxygenXML 19.1 的 .sef 文件。如果不发布所有代码,也许只有 Saxon 开发人员才能回答。感谢您的意见。
标签: xml saxon xslt-3.0 saxon-js