fefefsd
fefefsd

Reputation: 1

choosing to have calls to different templates in xsl

I have the below template that is xsl:apply template

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

as shown above it is working fine for 'PO' now i want to make it for CPTY too so I have developed it as shown..

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

but the problem is that there can't be two seprate templates with the same name payerPartyReference can you please advise what is the best approach to deal with this ..

what approach i am thinking is ..

  <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>       

Upvotes: 0

Views: 33

Answers (1)

Ian Roberts
Ian Roberts

Reputation: 122394

You're right that you can't have two templates with exactly the same matching pattern, but you can have

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

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

With these separate templates in place you may find you don't need to split out the apply-templates. Depending on the precise details of your problem you might find that you can just do one

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

and let the template matcher handle the conditional behaviour by picking the appropriate matching template for each target node.

Upvotes: 2

Related Questions