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="{(_at_)ID}">
<xsl:for-each select="key('x', @ID)">
<Property KEY="{(_at_)KEY}" VALUE="{(_at_)VALUE}">
</Property>
</xsl:for-each>
</Fruit>
</xsl:if>
</xsl:for-each>
</Fruitlist>
</xsl:template>
</xsl:stylesheet>
Regards,
Mukul
--- "Lee, Insoo" <Insoo(_dot_)Lee(_at_)gs(_dot_)com> 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[(_at_)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