为什么xsl:result-document在<xsl:attribute>指令内失败?</xsl:attribute>

时间:2011-11-24 10:07:25

标签: xslt xslt-2.0 saxon

我正在使用Saxon-EE 9.3.0.4进行xsl转换,发现在 <xsl:result-document> (以及<xsl:attribute><xsl:namespace>)指令中使用<xsl:processing-instruction>时,处理器 引发XTDE1480错误 - 在编写临时树时无法切换到最终结果目标

<xsl:attribute name="a">
    <xsl:result-document href="result.xml" > - error here
        test
    </xsl:result-document>
</xsl:attribute>

根据specification(附录D),<xsl:result-document>允许的父母是:

  • 其内容模型为序列构造函数
  • 的任何XSLT元素
  • 任何文字结果元素

这是Saxon中的错误还是<xsl:result-document>使用的限制,这些在规范中没有定义?

更新 我认为在<xsl:result-document>内使用<xsl:attribute>不是一个好主意,但为什么会出现错误?

由于

2 个答案:

答案 0 :(得分:2)

在规范中,您可以阅读:

  

初始模板中的指令在最终输出中进行评估   州。以与其相同的输出状态评估指令   调用指令,除了xsl:variable,xsl:param,   xsl:with-param,xsl:attribute,xsl:comment,   xsl:processing-instruction,xsl:namespace,xsl:value-of,xsl:function,   xsl:key,xsl:sort和xsl:message始终评估其中的指令   它们包含在临时输出状态的序列构造函数。

xsl:result-document在最终树结果中写入,并且根据上面的规则,我理解在以下元素内部尝试在最终树结果中写入是错误的

  

xsl:variable,xsl:param,xsl:with-param,xsl:attribute,xsl:comment,xsl:processing-instruction,xsl:namespace,xsl:value-of,xsl:function,xsl:key,xsl :sort和xsl:message

答案 1 :(得分:1)

2018年更新:请注意,XSLT 3.0规范放宽了限制。 xsl:attributexsl:comment之类的指令不再设置临时输出状态。最新的Saxon版本(肯定是9.8)执行了修订后的规则。