xml – XSLT参数的使用; &
请说明我可以使用最好的XSLT参数。
以< xsl:param> &安培; < XSL:与-PARAM> 示例LOC: <xsl:call-template name="ABC"> <xsl:with-param name="title" /> </xsl:call-template>
< 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来启动这样一个模板。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |