xsl-list
[Top] [All Lists]

RE: selecting elements only if they all have a particular attribute greater than zero

2004-04-20 05:11:30
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 &gt;= $checkIn) and
(key('roomTypeId',@id)/../@date &lt;=  $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 &gt; 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 
=
&lt;=3D 0)]"/>

Cheers,

Jarno


        
        
                
____________________________________________________________
Yahoo! Messenger - Communicate instantly..."Ping" 
your friends today! Download Messenger Now 
http://uk.messenger.yahoo.com/download/index.html


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