XSLT:使用模板中的参数调用模板,该模板提供参数

时间:2011-05-13 14:18:45

标签: xslt xslt-1.0

我想从template1内部调用template2,并为其提供template1中的参数。

现在,我有这样的事情:

<xsl:template name="template1" match="home/sentences/sentence">
        <xsl:if test="something...">
            <new_sentence>  
                <!-- ...other unrelated stuff... -->

                <xsl:apply-templates select="key('get_sentence_attribute', tokenRef/@tokID)"/>

                <!--Here I point to the template I made for tokens. 
                But I also wish to provide it with the value returned by get_sentence_attribute -->
                <xsl:apply-templates select="../../tokens"/>
            </new_sentence>
        </xsl:if>
</xsl:template>

<xsl:template name="template2" match="home/tokens">
      <!-- ... -->
</xsl:template>

基本上我需要确保我的标记模板选择的值与我在句子模板中得到的sentence_attribute相匹配。我用Google搜索并找到<xsl:with-param>元素;但这让我很困惑,我甚至不确定这是否是我需要的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

<!-- 1. store your results in a variable -->
<xsl:variable name="result">
<xsl:apply-templates select="key('get_sentence_attribute', tokenRef/@tokID)"/>
</xsl:variable>

<!-- 2. call your template with a param value -->
<xsl:call-template name="named-template">
    <xsl:with-param name="param1" value="$result"/>
</xsl:call-template/>

...
...

<!-- 3. you need to declare your template to accept a parameter -->
<xsl:template name="named-template">
    <xsl:param name="param1"/>

    <!-- do stuff with $param1-->
</xsl:template>