选择在xsl中调用不同的模板

时间:2015-02-23 11:17:51

标签: xslt xslt-1.0

我有以下模板,即xsl:apply template

<xsl:apply-templates
                    select="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'PO')]" />

如上所示它适用于PO&#39;现在我想为CPTY制作它所以我已经开发了它如图所示..

<xsl:apply-templates
                    select="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'CPTY')]" />

但问题是,不能有两个名称相同的单独模板payerPartyReference你可以告诉我们处理这个问题的最佳方法是什么。

我在想的是......

  <xsl:if  test="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'PO')]">


    </xsl:if>


    <xsl:if  test="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'CPTY')]">


    </xsl:if>       

1 个答案:

答案 0 :(得分:2)

你是对的,你不能拥有两个具有完全相同匹配模式的模板,但你可以拥有

<xsl:template match="fpml:payerPartyReference[starts-with(@href, 'PO')]">
  <!-- ... -->
</xsl:template>

<xsl:template match="fpml:payerPartyReference[starts-with(@href, 'CPTY')]">
  <!-- ... -->
</xsl:template>

使用这些单独的模板,您可能会发现不需要拆分apply-templates。根据问题的具体细节,您可能会发现只能做一个

<xsl:apply-templates
 select="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference" />

让模板匹配器通过为每个目标节点选择适当的匹配模板来处理条件行为。