2009-05-06 11 views
17

オプションのパラメータを使用してXSLテンプレートを呼び出す方法はありますか?例えばXSLテンプレートを呼び出すときのオプションのパラメータ

<xsl:call-template name="test"> 
    <xsl:with-param name="foo" select="'fooValue'" /> 
    <xsl:with-param name="bar" select="'barValue'" /> 
</xsl:call-template> 

をし、得られたテンプレートの定義:

<xsl:template name="foo"> 
    <xsl:param name="foo" select="$foo" /> 
    <xsl:param name="bar" select="$bar" /> 
    <xsl:param name="baz" select="$baz" /> 
    ...possibly more params... 
</xsl:template> 

このコード意志は私にエラーを与える「式エラー:変数 『バズ』が見つかりません」 "baz"宣言を外すことは可能ですか?

は、あなたが間違った xsl:param構文を使用している、 ヘンリー

答えて

40

、ありがとうございました。

代わりにこれを行います。

<xsl:template name="foo"> 
    <xsl:param name="foo" /> 
    <xsl:param name="bar" /> 
    <xsl:param name="baz" select="DEFAULT_VALUE" /> 
    ...possibly more params... 
</xsl:template> 

paramがxsl:param文の名前と一致するxsl:with-paramを使用して渡されたパラメータの値をとります。何も提供されていない場合、それは完全なXPath属性selectの値をとります。

詳細はW3School's entry on paramにあります。

+0

......ありがとう!!!! – HumanSky

+0

+1。 paramのw3schoolsページへのリンクをありがとう。 – GuruM

+0

私はこれが古いと知っていますが、w3schoolsのリンクは死んでいます。 – akousmata

2

パラメータを渡さないと、param要素の選択部分の値が使用されます。

変数またはパラメータ$ bazがまだ存在しないため、エラーが発生しています。それはあなたの例で動作するためには最上位レベルで定義されなければならないでしょう。これはあなたが望んでいたものではありません。

また、リテラル値をテンプレートに渡す場合、このように渡す必要があります。個人的に

<xsl:call-template name="test"> 
    <xsl:with-param name="foo">fooValue</xsl:with-param> 
3

、私は次のことをやって好む:

<xsl:call-template name="test"> 
    <xsl:with-param name="foo"> 
     <xsl:text>fooValue</xsl:text> 
    </xsl:with-param> 

私が検索を行うために私のXSLにXPathを使用できるように、私は、テキストを明示的に使用して好きです。私が書いていない、または覚えていないXSLの分析をするとき、何度も便利になってきました。

1

可読性を高めるために必要がない場合は、<xsl:param .../>を使用しないでください。

これは素晴らしい作品:

トリックをした
<xsl:template name="inner"> 
    <xsl:value-of select="$message" /> 
</xsl:template> 

<xsl:template name="outer"> 
    <xsl:call-template name="inner"> 
    <xsl:with-param name="message" select="'Welcome'" /> 
    </xsl:call-template> 
</xsl:template> 
関連する問題