RE: [xsl] Compound filter in for-each

Subject: RE: [xsl] Compound filter in for-each
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 27 Mar 2009 09:40:50 -0000
> OK, I think I have worked this out (and in the process have 
> gained more understanding of what you and Michael have been 
> trying to explain). 
> 
> To re-state: My XML (derived from KML) looks basically like this (some
> editing):
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <kml>
>   <Document>
> 	<Folder>
> 		<name>Acer campestre</name>
> 		<Placemark id="rpr_1">
> 			<name>Acer campestre</name>
> 			<ExtendedData>
> 			                 <Data name="grid_ref">
> 					<value>SN593798</value>
> 				</Data>
> 				<Data name="eng_name">
> 					<value>Field Maple</value>
> 				</Data>
> 				<Data name="rdb_status">
> 					<value>Lower risk - least
> concern</value>
> 				</Data>
> 				<Data name="location_name">
> 					<value>Penparcau</value>
> 				</Data>
> 				<Data name="last_seen">
> 					<value>**/**/2000</value>
> 				</Data>
> 			</ExtendedData>
> 			<Point>
> 				
> <coordinates>-4.069436,52.398051,0</coordinates>
> 			</Point>
> 		</Placemark>
> 	</Folder>
> </Document>
> </kml>
> 
> <Folder> and <Placemark> are repeated
> 
> I want to display (in csv format) the values of certain child 
> nodes of <Placemark> but (and this was the issue) in certain 
> circumstances I want to select out only data from Placemarks 
> where <Data name ='rdb_status'> and <Data/value='Endangered'>.
> 
> So, this is my solution now (avoiding using xsl:choose):
> 
> 	<xsl:template match="Folder">
> 			<xsl:for-each
> select="Placemark[ExtendedData/Data/attribute::name='rdb_statu
> s' and ExtendedData/Data/value='Endangered']">

I suspect this still isn't quite right. I suspect you want rdb_status and
Endangered to be present together on the same Data element, whereas you are
selecting any Placemark that has some Data with @name='rdb_status' and some
Data (perhaps a different Data) with value='Endangered'. If I'm right, you
want:

<xsl:for-each select="Placemark[ExtendedData/Data[@name='rdb_status' and
value='Endangered']]">

Michael Kay
http://www.saxonica.com/

Current Thread