現在、XSLT 1.0 から XSLT 2.0 にアップグレードしようとしています。XSLT 1.0 で動作していたテンプレートの 1 つに、次のものがありました。
<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>
さて、私がこのテンプレートを呼び出す 3 つのケースがあります :-
<xsl:call-template name="some_t">
<xsl:with-param name="some_numeric_param" select="floor(number(./@attr1) div 20)"/>
</xsl:call-template>
これを行うと、基本的に内部テンプレートは、ソース ドキュメントで「attr1」という属性が指定されている場合、「some_name」という属性のみを作成します。
また、これを呼び出す可能性のある別の状況は、このパラメーターなしです:-
<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 プロセッサを使用しています。