Re: [xsl] Choosing based on current node

Subject: Re: [xsl] Choosing based on current node
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Mon, 12 Feb 2007 22:05:26 +0530
I think Abel has given some good remarks.

But I think, your code fragment needs to be modified as:

<xsl:for-each select="A|B|C">
 <xsl:choose>
    <xsl:when test="self::A">
      <xsl:call-template name="do-A"/>
    </xsl:when>
    <xsl:when test="self::B">
      <xsl:call-template name="do-B"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:call-template name="do-C"/>
    </xsl:otherwise>
 </xsl:choose>
</xsl:for-each>

On 2/12/07, sthomas2@xxxxxxx <sthomas2@xxxxxxx> wrote:

I'm amazed at how patient this list is with newbie questions; I hope this question doesn't try that patience too much. I'm processing a document that has <A> or <B> or <C> elements in it. I need to preserve their order in the output, but do something drastically different for each. It seems like the following ought to work, but, instead, the otherwise branch is always performed, regardless of whether the element is A, B, or C. (The for-each is working fine, as it correctly skips over any elements other than A, B, or C.)

<xsl:for-each select="A|B|C">
   <xsl:choose>
       <xsl:when test=".=A">
           <xsl:call-template name="do-A"/>
       </xsl:when>
       <xsl:when test=".=B">
           <xsl:call-template name="do-B"/>
       </xsl:when>
       <xsl:otherwise>
           <xsl:call-template name="do-C"/>
       </xsl:otherwise>
   </xsl:choose>
</xsl:for-each>

Thanks in advance,

Stephen


--
Regards,
Mukul Gandhi

Current Thread