我目前正在尝试从 XSLT 1.0 升级到 XSLT 2.0。我曾经使用 XSLT 1.0 的模板之一中有以下内容:-
<xsl:template name="some_t">
<xsl:param name="some_numeric_param"/>
<xsl:if test="$some_numeric_param != ''">
<xsl:attribute name="some_name">
<xsl:value-of select="$some_numeric_param"/>
</xsl:attribute>
</xsl:if>
</xsl:template>
现在,在三种情况下我称这个模板为:-
<xsl:call-template name="some_t">
<xsl:with-param name="some_numeric_param" select="floor(number(./@attr1) div 20)"/>
</xsl:call-template>
当我这样做时,基本上内部模板只会创建名为“some_name”的属性,前提是源文档中给出了名为“attr1”的属性。
另外,我可能称之为的另一种情况是没有这个参数:-
<xsl:call-template name="some_t">
</xsl:call-template>
所以我基本上想要它做的是,当我传入一个参数然后创建一个属性,否则不要。无论我的样式表是否正确,这在 XSLT 1.0 中有效,但在 XSLT 2.0 中,它给出了一个错误消息:-
Error on line 195 of movwin.xsl:
XPTY0004: Cannot compare xs:double to xs:string
Transformation failed: Run-time errors were reported
有什么帮助吗?我正在使用 Saxon 9.4 处理器。