Subject: Re: [xsl] Grouping problem - Duplicates From: Sarah <sarah10@xxxxxxxxxxx> Date: Sat, 01 May 2004 09:39:20 +0200 |
Thanks again, Sarah
Hi Sarah, I rewrote the XSL. I have not used HTML tags in my stylesheet. Hope you can adapt it for yourself.
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan" exclude-result-prefixes="xalan"> <xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="by-area1" match="/Company/Suppliers/Area/*" use="name()"/> <xsl:key name="by-area2" match="area" use="@name"/> <xsl:key name="by-name" match="Name" use="concat(FirstName,':',LastName)"/>
<xsl:template match="/Company/Suppliers"> <xsl:variable name="rtf1"> <xsl:for-each select="Area/*"> <xsl:if test="generate-id(.) = generate-id(key('by-area1', name())[1])"> <xsl:for-each select="key('by-area1', name())"> <area name="{name()}"> <xsl:value-of select="."/> </area> </xsl:for-each> </xsl:if> </xsl:for-each> </xsl:variable>
<xsl:variable name="rtf3"> <xsl:for-each select="SalesPeople/SalesPerson"> <xsl:variable name="rtf2"> <Name> <LastName> <xsl:value-of select="Name/LastName"/> </LastName> <FirstName> <xsl:value-of select="Name/FirstName"/> </FirstName> </Name> </xsl:variable>
<xsl:for-each select="Supplier"> <xsl:variable name="supplier" select="."/> <xsl:for-each select="xalan:nodeset($rtf1)/area"> <xsl:if test="text() = $supplier"> <area name="{@name}"> <Name> <LastName> <xsl:value-of select="xalan:nodeset($rtf2)/Name/LastName"/> </LastName> <FirstName> <xsl:value-of select="xalan:nodeset($rtf2)/Name/FirstName"/> </FirstName> </Name> </area> </xsl:if> </xsl:for-each> </xsl:for-each> </xsl:for-each> </xsl:variable>
<xsl:variable name="rtf4"> <xsl:for-each select="xalan:nodeset($rtf3)/area"> <xsl:if test="generate-id(.) = generate-id(key('by-area2', @name)[1])"> <area name="{@name}"> <xsl:for-each select="key('by-area2', @name)"> <Name> <LastName> <xsl:value-of select="Name/LastName"/> </LastName> <FirstName> <xsl:value-of select="Name/FirstName"/> </FirstName> </Name> </xsl:for-each> </area> </xsl:if> </xsl:for-each> </xsl:variable>
<xsl:for-each select="xalan:nodeset($rtf4)/area"> <xsl:sort select="@name"/> <xsl:value-of select="@name"/><xsl:text> </xsl:text> <xsl:variable name="rtf5"> <xsl:copy-of select="."/> </xsl:variable> <xsl:for-each select="xalan:nodeset($rtf5)/area/Name"> <xsl:if test="generate-id(.) = generate-id(key('by-name', concat(FirstName,':',LastName))[1])"> <xsl:value-of select="FirstName"/><xsl:text> </xsl:text> <xsl:value-of select="LastName"/><xsl:text> </xsl:text> </xsl:if> </xsl:for-each> </xsl:for-each> </xsl:template>
</xsl:stylesheet>
Regards, Mukul
--- Sarah <sarah10@xxxxxxxxxxx> wrote:
> Here is a copy of my XML file called Company.xml: > > <Company> > <Suppliers> > <Area> > <North>Supp 1 Nor</North> > <South>Supp 1 Sou</South> > <Center>Supp 1 > Cntr</Center> > <North>Supp 2 Nor</North> > <North>Supp 3 Nor</North> > <South>Supp 2 Sou</South> > <South>Supp 3 Sou</South> > <Center>Supp 2 > Cntr</Center> > <Center>Supp 3 > Cntr</Center> > <North>Smith Suppliers > LTD.</North> > <South>Smith Suppliers > LTD.</South> > <Center>Sundance suppliers > Cntr</Center> > </Area> > <SalesPeople> > <SalesPerson> > <Name> > > <LastName>lName Supp 1</LastName> > > <FirstName>John</FirstName> > </Name> > > <Title>Manager</Title> > <Supplier>Supp 1 > Nor</Supplier> > <Supplier>Supp 1 > Sou</Supplier> > <Supplier>Supp 1 > Cntr</Supplier> > <Supplier>Supp 2 > Cntr</Supplier> > <Supplier>Supp 3 > Cntr</Supplier> > <Supplier>Smith > Suppliers LTD.</Supplier> > <Supplier>Smith > Suppliers LTD.</Supplier> > <Supplier>Sundance > suppliers Cntr</Supplier> > </SalesPerson> > <SalesPerson> > <Name> > > <LastName>lName Supp 2</LastName> > > <FirstName>Kathy</FirstName> > </Name> > <Title>CEO</Title> > <Supplier>Supp 2 > Nor</Supplier> > <Supplier>Supp 2 > Sou</Supplier> > <Supplier>Supp 2 > Cntr</Supplier> > <Supplier>Supp 1 > Cntr</Supplier> > <Supplier>Supp 2 > Cntr</Supplier> > <Supplier>Supp 3 > Cntr</Supplier> > <Supplier>Smith > Suppliers LTD.</Supplier> > </SalesPerson> > <SalesPerson> > <Name> > > <LastName>lName Supp 3</LastName> > > <FirstName>Dan</FirstName> > </Name> > <Title>Dr.</Title> > <Supplier>Supp 3 > Nor</Supplier> > <Supplier>Supp 3 > Sou</Supplier> > <Supplier>Supp 3 > Cntr</Supplier> > <Supplier>Supp 1 > Cntr</Supplier> > <Supplier>Supp 2 > Cntr</Supplier> > <Supplier>Supp 3 > Cntr</Supplier> > <Supplier>Smith > Suppliers LTD.</Supplier> > <Supplier>Smith > Suppliers LTD.</Supplier> > <Supplier>Sundance > suppliers Cntr</Supplier> > </SalesPerson> > <SalesPerson> > <Name> > > <LastName>lName Apprentice</LastName> > > <FirstName>George</FirstName> > </Name> > > <Title>Apprentice</Title> > <Supplier>Supp 3 > Nor</Supplier> > </SalesPerson> > <SalesPerson> > <Name> > > <LastName>lName Samuel</LastName> > > <FirstName>Dave</FirstName> > </Name> > > <Title>Developer</Title> > <Supplier>Supp 3 > Nor</Supplier> > <Supplier>Supp 3 > Sou</Supplier> > <Supplier>Supp 3 > Cntr</Supplier> > <Supplier>Supp 1 > Cntr</Supplier> > <Supplier>Supp 2 > Cntr</Supplier> > </SalesPerson> > </SalesPeople> > </Suppliers> > </Company> > > > I would like to see the following output: > > > > > Sales People by Areas > > > Center > > Dave lName Samuel > John lName Supp 1 > Kathy lName Supp 2 > Dan lName Supp 3 > > North > > John lName Supp 1 > Kathy lName Supp 2 > George lName Apprentice > Dave lName Samuel > Dan lName Supp 3 > > South > > John lName Supp 1 > Kathy lName Supp 2 > Dave lName Samuel > Dan lName Supp 3
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Grouping problem - Duplic, Sarah | Thread | Re: [xsl] Grouping problem - Duplic, Mukul Gandhi |
RE: [xsl] Grouping problem - Duplic, Sarah | Date | [xsl] getting the attribute into th, Toma Tasovac |
Month |