Re: [xsl] XSLT Question

Subject: Re: [xsl] XSLT Question
From: Mukul Gandhi <mukulw3@xxxxxxxxx>
Date: Wed, 20 Aug 2003 21:00:57 -0700 (PDT)
Please use Muenchian method for grouping. Below is the
complete XSL --

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
   <xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"/>
   <xsl:key name="x" match="Fruit" use="@ID"/>
   
   <xsl:template match="/FruitList">
     <Fruitlist>
       <xsl:for-each select="Fruit">
	 <xsl:if test="generate-id(.) = generate-id(key('x',
@ID)[1])">
	 <Fruit ID="{@ID}">
	   <xsl:for-each select="key('x', @ID)">
              <Property KEY="{@KEY}" VALUE="{@VALUE}">
                                   
              </Property>
           </xsl:for-each>
         </Fruit>    
	</xsl:if>
      </xsl:for-each>
   </Fruitlist>
</xsl:template>
</xsl:stylesheet>

Regards,
Mukul

--- "Lee, Insoo" <Insoo.Lee@xxxxxx> wrote:
> 
> 
> 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
> 


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

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


Current Thread