我正在使用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>
允许的父母是:
这是Saxon中的错误还是<xsl:result-document>
使用的限制,这些在规范中没有定义?
更新
我认为在<xsl:result-document>
内使用<xsl:attribute>
不是一个好主意,但为什么会出现错误?
由于
答案 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:attribute
和xsl:comment
之类的指令不再设置临时输出状态。最新的Saxon版本(肯定是9.8)执行了修订后的规则。