Hi,
Thank you for the reply, that solved my problem.
If I understand correctly then
<xsl:apply-templates
select="property[(_at_)selected='yes']/vacancy/month/date/roomType[generate-id()
= generate-id(key('roomTypeId',@id)) and
not(key('roomTypeId',@id)/@count = 0) and
(key('roomTypeId',@id)/../@date >= $checkIn) and
(key('roomTypeId',@id)/../@date <= $checkOut)]"
mode="vacancies"/>
($checkIn and $checkOut are parameters with values 4
and 6 say)
should only concern itself with the roomTypes between
the dates 4 to 6 inclusive and I should be able to see
the 4 types of room displayed(because their count is
greater than zero for all those days), but what seems
to be happening is that because <roomType id="1"> has
a count of zero for a date beforehand, it is not being
displayed. What am I missing? How do I say "only
select roomTypes between the 4th and 6th that have a
count greater than zero?" rather than "only select
roomTypes that have a count greater than zero and then
select the roomTypes leftover between the 4th and
6th?"
<property name="Hotel A" id="1">
<vacancy>
<month name="4">
<date date="1">
<roomType id="1" count="1" type="1R" cost="100"/>
<roomType id="10" count="1"type="2DK" cost="100"/>
<roomType id="13" count="1" type="3DK" cost="100"/>
</date>
<date date="2">
<roomType id="1" count="0" type="1R" cost="100"/>
<roomType id="10" count="1" type="2DK" cost="100"/>
<roomType id="11" count="1" type="2DK" cost="200"/>
<roomType id="12" count="2" type="2LDK" cost="100"/>
</date>
<date date="3">
<roomType id="1" count="0" type="1R" cost="100"/>
<roomType id="10" count="1" type="2DK" cost="100"/>
<roomType id="11" count="1" type="2DK" cost="200"/>
<roomType id="12" count="2" type="2LDK" cost="100"/>
</date>
<date date="4">
<roomType id="1" count="1" type="1R" cost="100"/>
<roomType id="10" count="1" type="2DK" cost="100"/>
<roomType id="11" count="1" type="2DK" cost="200"/>
<roomType id="12" count="2" type="2LDK" cost="100"/>
</date>
<date date="5">
<roomType id="1" count="1" type="1R" cost="100"/>
<roomType id="10" count="1" type="2DK" cost="100"/>
<roomType id="11" count="1" type="2DK" cost="200"/>
<roomType id="12" count="2" type="2LDK" cost="100"/>
</date>
<date date="6">
<roomType id="1" count="1" type="1R" cost="100"/>
<roomType id="10" count="1" type="2DK" cost="100"/>
<roomType id="11" count="1" type="2DK" cost="200"/>
<roomType id="12" count="2" type="2LDK" cost="100"/>
</date>
</month>
</vacancy>
</property>
Thanks,
Donal
Date: Wed, 14 Apr 2004 11:12:16 +0300
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
From: <Jarno(_dot_)Elovirta(_at_)nokia(_dot_)com>
Subject: RE: [xsl] selecting elements only if they all
have a
particular attribute greater than zero
Message-ID:
<E392EEA75EC5F54AB75229B693B1B6A708288A0E(_at_)esebe018(_dot_)ntc(_dot_)nokia(_dot_)com>
Hi,
<xsl:key name=3D"roomTypeId"
match=3D"//date/roomType"
use=3D"@id"/>
The match pattern can be just "roomType".
<xsl:template match=3D"/property">
<table>
<tr><td><xsl:value-of select=3D"@name"/></td></tr>
</table>
<table width=3D"300" border=3D"0" cellspacing=3D"0"
cellpadding=3D"2">
<tr>
<td width=3D"22"> </td>
<td>roomType</td>
<td>cost</td>
</tr>
=09
<xsl:apply-templates
select=3D"//date/roomType[count(.|key('roomTypeId',@id)[1])=3D1
and @count > 0]"/>
(Because of personal preference, I rewrote the
expression to use =
generate-id.)
<xsl:apply-templates =
select=3D"vacancy/month/date/roomType[generate-id()
=3D =
generate-id(key('roomTypeId',@id)) and
not(key('roomTypeId',@id)/@count
=
<=3D 0)]"/>
Cheers,
Jarno
____________________________________________________________
Yahoo! Messenger - Communicate instantly..."Ping"
your friends today! Download Messenger Now
http://uk.messenger.yahoo.com/download/index.html