是否存在Saxon-JS处理包含CDATA元素的已知错误

时间:2018-02-18 19:50:04

标签: xml saxon xslt-3.0 saxon-js

我想知道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按照Saxon-HE的方式处理CDATA部分的方式或不处理CDATA部分的方式?

迈克尔

2 个答案:

答案 0 :(得分:1)

请参阅enter image description here

  

Saxon-JS没有实现以下的可选功能   规范:模式感知,序列化,流媒体,   高阶函数和disable-output-escaping

答案 1 :(得分:1)

是的,有一个已知问题:https://saxonica.plan.io/issues/3385

如果没有看到更多代码,我不确定该问题是否相关。该bug表示如果有任何空白剥离有效,CDATA部分将转换为文本节点,但不是这样,所以一个有用的实验将是看看如果添加到样式表会发生什么

<xsl:strip-space elements="a-dummy-element-name"/>

这将触发空白剥离,这也会将CDATA节点转换为普通文本节点。

但是,这并不能解决您的代码依赖于disable-output-escaping的问题。如果您的CDATA /文本节点包含需要复制到HTML页面的HTML标记,则在Saxon-JS下执行此操作的唯一方法是将HTML解析为节点树,并将节点添加到HTML DOM。如果HTML是格式良好的XML,则可以使用parse-xml()函数执行此操作;如果没有,您可能需要调用Javascript。