xsl-list
[Top] [All Lists]

Re: FW: How to store a node in a local variable using if or when

2003-07-31 21:23:49
You may try a XSL as below ..

<xsl:template match="something">
  <xsl:if test="condition1">
    <xsl:call-template name="process-node">
       <xsl:with-param name="x" select="some-xpath1"/>
    </xsl:call-template>
  </xsl:if>
  <xsl:if test="condition2">
    <xsl:call-template name="process-node">
      <xsl:with-param name="x" select="some-xpath2"/>
    </xsl:call-template>
  </xsl:if>
</xsl:template>
        
<xsl:template name="process-node">
  <xsl:param name="x"/>
  <xsl:for-each select="$x">
    <!-- process -->
  </xsl:for-each>
</xsl:template>

Here i am creating a named template process-node. You
can call it with xsl:call-template with a different
parameter value, depending which condition evaluates
true..


Regards,
Mukul


--- Néstor_Boscán <nestor(_dot_)boscan(_at_)tcs(_dot_)com(_dot_)ve> wrote:
Hi

I would like to process information from a node that
can come from two
different places in the XML tree. Because the
processing is the same I
create a variable and with a choice element I will
set the variable to
one of the two nodes. So I can figure out only two
ways of doing it that
doesn't work. Here are the two examples:

First example use <xsl:value-of>:

<xsl:variable name="node"/>
    <xsl:choose>
        <xsl:when test="condition1">
            <xsl:value-of select="/a/b/c"/>
        </xsl:when>
        <xsl:when test="condition2">
            <xsl:value-of select="/c"/>
        </xsl:when>
    </xsl:choose>
</xsl:variable>

<xsl:for-each select="$node">
    process
</xsl:for-each>

Will not work because <xsl:value-of> only selects
strings not nodes. So
<xsl:variable name="node" select="path"/> is not the
same as
<xsl:variable name="node"><xsl:value-of
select="path"/></xsl:variable>

Second example use "select" attribute in variable:

<xsl:choose>
    <xsl:when test="condition1">
        <xsl:variable name="node"  select="/a/b/c"/>
    </xsl:when>
    <xsl:when test="condition2">
        <xsl:variable name="node"  select="/c"/>
    </xsl:when>
</xsl:choose>
</xsl:variable>

<xsl:for-each select="$node">
    process
</xsl:for-each>

Will not work because variable "node" is out of
scope.

Any ideas?



 XSL-List info and archive: 
http://www.mulberrytech.com/xsl/xsl-list



__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>