[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] XSLT Question


Subject: RE: [xsl] XSLT Question
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Wed, 20 Aug 2003 22:02:50 +0100

A straightforward grouping problem, see
http://www.jenitennison.com/xslt/grouping.

Michael Kay

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Lee, Insoo
> Sent: 20 August 2003 16:45
> To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
> Cc: Penn, Alden
> Subject: [xsl] XSLT Question
> 
> 
> 
> 
> I am currently using an XSLT stylesheet to transform one type 
> of XML into another.  The first type looks like this:
> 
> <FruitList>
> 	<Fruit ID="5" KEY="apple" VALUE="true">
> 	<Fruit ID="5" KEY="orange" VALUE="false">
> 	<Fruit ID="4" KEY="orange" VALUE="false">
> 	<Fruit ID="5" KEY="banana" VALUE="false">
> 	<Fruit ID="4" KEY="pineapple" VALUE="false">
> 	<Fruit ID="13" KEY="orange" VALUE="false">
> 	<Fruit ID="13" KEY="watermelon" VALUE="true">
> 	<Fruit ID="4" KEY="kiwi" VALUE="false">
> 	<Fruit ID="4" KEY="grapefruit" VALUE="true">
> 	<Fruit ID="13" KEY="papaya" VALUE="false">
> 	<Fruit ID="13" KEY="honeydew" VALUE="true">
> </FruitList>
> 
> I'd like to write a stylesheet to transform it as follows:
> 
> <FruitList>
> 	<Fruit ID="5">
> 		<Property KEY="apple" VALUE="true">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="banana" VALUE="false">
> 	</Fruit>
> 	<Fruit ID="4">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="pineapple" VALUE="false">
> 		<Property KEY="kiwi" VALUE="false">
> 		<Property KEY="grapefruit" VALUE="true">
> 	</Fruit>
> 	<Fruit ID="13">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="watermelon" VALUE="true">
> 		<Property KEY="papaya" VALUE="false">
> 		<Property KEY="honeydew" VALUE="true">
> 	</Fruit>
> </FruitList>
> 
> 
> So far, using a <xsl:for-each select="//Fruit">  with a 
> nested <xsl:for-each select="//Fruit[@ID=$a]"> where $a = the 
> current ID, I've been able to get the XML to look like the following:
> 
> <FruitList>
> 	<Fruit ID="5">
> 		<Property KEY="apple" VALUE="true">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="banana" VALUE="false">
> 	</Fruit>
> 	<Fruit ID="5">
> 		<Property KEY="apple" VALUE="true">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="banana" VALUE="false">
> 	</Fruit>
> 	<Fruit ID="5">
> 		<Property KEY="apple" VALUE="true">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="banana" VALUE="false">
> 	</Fruit>
> 	<Fruit ID="4">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="pineapple" VALUE="false">
> 		<Property KEY="kiwi" VALUE="false">
> 		<Property KEY="grapefruit" VALUE="true">
> 	</Fruit>
> 	<Fruit ID="4">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="pineapple" VALUE="false">
> 		<Property KEY="kiwi" VALUE="false">
> 		<Property KEY="grapefruit" VALUE="true">
> 	</Fruit>
> 	<Fruit ID="4">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="pineapple" VALUE="false">
> 		<Property KEY="kiwi" VALUE="false">
> 		<Property KEY="grapefruit" VALUE="true">
> 	</Fruit>
> 	<Fruit ID="4">
> 		<Property KEY="orange" VALUE="false">
> 		<Property KEY="pineapple" VALUE="false">
> 		<Property KEY="kiwi" VALUE="false">
> 		<Property KEY="grapefruit" VALUE="true">
> 	</Fruit>
> 
> ...
> 
> </FruitList>
> 
> In other words, it prints out a seperate Fruit tag in the 
> transformed XML for each of the Fruit tags in the original 
> when I want it to only print out one fruit tag for each ID.  
> How do I get the XSLT to "skip" rows I've already processed?  
> I tried saving the processed ID in a variable and testing to 
> see if the new ID is equal to the old ID, but because of 
> scoping issues it won't work.  Any ideas?
> 
> 
> Thanks,
> 
> Alden
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


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



Current Thread
Keywords