There are two approaches.
(1) read the input twice
for-each select="xxx"
yyy
/for-each
if (not(xxx)) message
(2) put the output in a variable
variable v
for-each select="xxx"
yyy
/for-each
/variable
choose
when test="$v=''" message /when
otherwise copy-of select=$v /otherwise
/choose
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
Peter Hollingsworth
Sent: 12 September 2003 00:12
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