Saxon9.4とXSLT2.0を使用しています
スタイルシートに次のコードスニペットがあります:-
<xsl:template name="some_template">
<xsl:param name="some_param" as="xs:integer?"/>
</xsl:template>
これは基本的に、オプションの整数パラメーターを受け取るテンプレートです。でもこう呼ぼうとすると
<xsl:call-template name="some_template>
<xsl:with-param name="some_param">
<xsl:if test="some_condition">
<xsl:value-of select="xs:integer(./@attr div 20)"/>
</xsl:if>
</xsl:with-param>
</xsl:call-template>
次のようなエラーメッセージが表示されます:-
Validation error FORG0001: Cannot convert zero-length string to an integer
ただし、次の2つのスタイルシートではエラーは発生しません:-
<xsl:call-template name="some_template>
<xsl:with-param name="some_param">
<xsl:value-of select="xs:integer(./@attr div 20)"/>
</xsl:with-param>
</xsl:call-template>
また
<xsl:variable name="dummy" as="xs:integer?">
<xsl:if test="some_condition">
<xsl:value-of select="xs:integer(./@attr div 20)"/>
</xsl:if>
</xsl:variable>
<xsl:call-template name="some_template>
<xsl:with-param name="some_param" select="$dummy"/>
</xsl:call-template>
したがって、明らかにタイプ情報はブロック全体で保持されていません。最初のものを機能させる方法はありますか?3番目のスタイルシートは、意味的に必要なことを実行しますが、これを実行できるようにするためだけに、(いくつかの)ダミー変数を作成することは避けたいと思います。
ありがとう!