xsl-list
[Top] [All Lists]

RE: Do something if no items in for-each meet criteria

2003-09-12 03:16:02
This code is wrong, it produces no output if one or more furry animals
are found.

Michael Kay

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Xia Li
Sent: 12 September 2003 00:57
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Do something if no items in for-each meet criteria



Hi,
   Here is a possible solution, create a variabe to record 
the result of "for-each" statement and test the length of the 
variable. It might not be the perfect one. but it can get the 
desired result.

<xsl:transform xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
version='1.0'
xmlns:lang='en'

      <xsl:template match="/">
              <xsl:variable name="noFurry">
                      <xsl:for-each select="//animal">
                              <xsl:if test="furry = 'true'">
                                      <xsl:value-of 
select="type"/><br/>
                              </xsl:if>
                      </xsl:for-each>
              </xsl:variable>

              <xsl:if test="string-length($noFurry) = 0">
                      <xsl:message>None are furry</xsl:message>
              </xsl:if>
      </xsl:template>
</xsl:transform>

Lisa

Software Engineer
Galdos Systems Inc

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of 
Peter Hollingsworth
Sent: Thursday, September 11, 2003 4:12 PM
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Do something if no items in for-each meet criteria


I'm trying to
   1) go through a set of nodes
   2) if any matches my criteria, display it
   3) if NONE matches my criteria, display a message like "None"

For example, imagine this xml listing some animals:
<animal>
   <type>snake</type>
   <furry>false</furry>
</animal>
<animal>
   <type>fish</type>
   <furry>false</furry>
</animal>

and this XSL that lists all the ones with fur:
The following animals are furry:<br/>
<xsl:for-each select="animal">
   <xsl:if test="furry = 'true'">
     <xsl:value-of select="type"/><br/>
   </xsl:if>
</xsl:for-each>
[if no animals were furry, print "None are furry"]  <---how 
can I do this?

Any way I can accomplish what I'm trying to do on the last line above?

Thanks.

--Peter


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




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



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