xsl-list
[Top] [All Lists]

RE: Adding Variables

2004-08-16 06:20:28

What I've never quite understood is how to wrap this into a 
conditional.

Based on http://www.dpawson.co.uk/xsl/sect2/N8090.html#d9711e895 
example, would this be correct for wrapping an assignment in 
only if a 
variable was passed in, otherwise using the default?

<xsl:variable name="n">
   <!--Conditionally instantiate a value to be assigned to 
the variable 
-->
   <xsl:choose>
     <xsl:when test=="//test1/somevalue1">
       <xsl:variable name="num1" select="//test1/somevalue1"/>
     </xsl:when>
     <xsl:otherwise>
       <xsl:value-of select="20"/><!-- ...or a "20" -->
     </xsl:otherwise>
   </xsl:choose>
</xsl:variable>


The problem with this code is that you get a copy of the nodes in
somevalue1. If you want the variable to hold references to the actual nodes,
a conditional assignment is difficult to achieve in XSLT 1.0. It becomes
easy in 2.0:

<xsl:variable name="n" select="if (COND) then //a/b/c else 20"/>

In 1.0 you can sometimes solve the problem with

<xsl:variable name="n" select="//a/b/c[COND] | //a/b/d[not(COND)]"/>

Michael Kay




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