3

我正在开发一个样式表,该样式表使用许多具有匹配属性的模板:

<xsl:template match="//one" priority="0.7">
   <xsl:param name="input" select="."/>
   <xsl:value-of select="util:uppercase($input)"/>
   <xsl:next-match />
</xsl:template>

<xsl:template match="/stuff/one">
    <xsl:param name="input" select="."/>
    <xsl:value-of select="util:add-period($input)"/>
</xsl:template>

<xsl:function name="util:uppercase">
    <xsl:param name="input"/>
    <xsl:value-of select="upper-case($input)"/>
</xsl:function>

<xsl:function name="util:add-period">
    <xsl:param name="input"/>
    <xsl:value-of select="concat($input,'.')"/>
</xsl:function>

我想做的是能够“链接”上面的两个函数,以便“字符串”的输入将在输出中呈现为“字符串”。(带有句号。)我想以不需要了解任何其他模板中的其他模板的方式来执行此操作。因此,例如,我希望能够添加一个“util:add-colon”方法,而不必使用现有模板打开引擎盖和猴子。

我正在玩弄<xsl:next-match/>完成此操作的指令。将它添加到上面的第一个模板当然会调用 util:uppercase 和 util:add-period,但输出是每个模板输出的聚合(即“STRINGstring”。)似乎应该有一种优雅的链接方式任意数量的模板一起使用类似的东西<xsl:next-match/>,但让每个模板的输出馈送链中下一个模板的输入。我是否忽略了一些明显的东西?

4

1 回答 1

3

可以通过捕获template1in的输出来完成模板的链接xsl:variable,然后将其应用于template2此 xsl:variable 的内容。

但是,我建议使用功能组合

util:add-period(util:uppercase(.))

此外,如果您稍作更改,也可以达到预期的效果util:add-period()

使用

<xsl:function name="util:add-period" as="xs:string">  
    <xsl:text>.</xsl:text>  
</xsl:function>
于 2010-05-07T20:31:38.653 回答