以< xsl:param> &安培; < XSL:与-PARAM>
示例LOC:
<xsl:call-template name="ABC"> <xsl:with-param name="title" /> </xsl:call-template>
Please explain me how best XSLT param can be used. in terms of
<xsl:param>
&<xsl:with-param>
< XSL:PARAM>可以在全局级别(作为xsl:stylesheet的子代)指定,或者如果它在模板中,则它必须是其子代,并且必须位于xsl:template的任何非xsl:param子元素之前。
这是允许模板或整个转换(在全局xsl:param的情况下)分别从模板的调用者/启动器或整个转换接收变化的数据的工具。
在模板/转换的调用者/启动器的一边,使用xsl:with-param指令传递参数。它可以是xsl:apply-templates或xsl:call-template的子代。
xsl:param或xsl:with-param的name属性是必需的。它标识参数。
xsl:with-param的select属性可以用于指定任何XPath表达式,其评估结果传递给被调用/应用的模板。
或者,该值可以在xsl:with-param的内容(正文)中指定。
xsl:with-param必须具有select属性或body。但不是两者。
一个xsl:param也可以有一个select属性或body。在这种情况下,这些指定参数的默认值,如果调用者没有指定此名称的参数,则使用该参数。
最后,这是一个完整的例子,说明大部分这些概念:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:param name="pTarget" select="'love'"/> <xsl:param name="pReplacement" select="'like'"/> <xsl:template match="/*"> <xsl:call-template name="replace"> <xsl:with-param name="pPattern" select="$pTarget"/> <xsl:with-param name="pRep" select="$pReplacement"/> </xsl:call-template> <xsl:text>
</xsl:text> <xsl:call-template name="replace"/> <xsl:text>
</xsl:text> <xsl:apply-templates select="text()"> <xsl:with-param name="pPattern" select="$pTarget"/> <xsl:with-param name="pRep" select="'adore'"/> </xsl:apply-templates> </xsl:template> <xsl:template match="text()" name="replace"> <xsl:param name="pText" select="."/> <xsl:param name="pPattern" select="'hate'"/> <xsl:param name="pRep" select="'disapprove'"/> <xsl:if test="string-length($pText) >0"> <xsl:choose> <xsl:when test="not(contains($pText,$pPattern))"> <xsl:value-of select="$pText"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="substring-before($pText,$pPattern)"/> <xsl:value-of select="$pRep"/> <xsl:call-template name="replace"> <xsl:with-param name="pPattern" select="$pPattern"/> <xsl:with-param name="pRep" select="$pRep"/> <xsl:with-param name="pText" select= "substring-after($pText,$pPattern)"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:if> </xsl:template> </xsl:stylesheet>
当应用于此XML文档时…
<t>Sports stars we really love,love to hate,hate</t>
…结果是…
Sports stars we really like,like to hate,hate Sports stars we really love,love to disapprove,disapprove Sports stars we really adore,adore to hate,hate
说明:
>替换模板被调用两次。在两个调用中,省略了pText参数。其默认值由被调用的模板使用。>第一个调用提供模式和替换参数,所以“爱”被替换为“喜欢”。>请注意,全局参数$ pTarget和$ pReplacement的值将被传递。如果转换的启动器决定传递其他值(而不是此代码中使用的默认值),则这些值将被传递给替换模板,而不是缺省值“爱”和“喜欢”。>第二个调用根本不提供任何参数值,因此使用替换模板中的所有默认值 – 字符串“hate”由字符串“rejectrove”替代。>请注意,替换模板会自动递归调用,以使所有出现的模式被替换。>此外,递归调用的pText参数的值不是静态的,而是动态计算的。>第三次从外部启动替换模板是通过xsl:apply-templates。这里我们还显示一个模板可以同时具有匹配和名称属性,并且可以使用xsl:apply-templates和xsl:call-template来启动这样一个模板。