[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Hi,
I am new to XSLT. I am trying to sort an XML file and display the output as a simple html report with no repetitions.
I cannot find the way to do it.
I would appreciate help, very much.
Thanks, Sarah
Here is a copy of my XML file called Company.xml:
I would like to see the following output:
Sales People by Areas
Center
North
South
But I get:
Sales People by Areas
Center
North
South
This is the stylesheet I used (called: sales_by_area.xsl):
<xsl:template match="/">
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="description" content="Suppliers by Sales People" />
<link href="text.css" rel="stylesheet" type="text/css" />
<title>Your company</title>
</head>
<body>
<h1>Sales People by Areas <br /></h1>
<xsl:for-each select="//Area/*[generate-id(.)=generate-id(key('areas', name()))]">
<xsl:sort select="key('areas', name())"/>
<h2><xsl:value-of select="name()"/></h2>
<xsl:for-each select="key('areas', name())">
<xsl:sort select="key('areas', text())"/>
<xsl:variable name="supplier_name" select="text()">
</xsl:variable>
<xsl:variable name="area_name" select="name()">
</xsl:variable>
<xsl:for-each select="//SalesPerson[generate-id()=generate-id(key('fullName', Name))]">
<xsl:sort select="key('fullName', Name)"/>
<xsl:apply-templates select="Name">
<xsl:with-param name="curr_supp" select="$supplier_name"/>
<xsl:with-param name="curr_area" select="$area_name"/>
</xsl:apply-templates>
</xsl:for-each>
<xsl:for-each select="//SalesPerson[generate-id()=generate-id(key('supplier-list', Supplier))]">
<xsl:sort select="key('supplier-list', Supplier)"/>
<xsl:for-each select="key('supplier-list', $curr_supp)">
<xsl:if test="$fName = Name">
<xsl:if test="Supplier = $curr_supp">
<p class="textenglish">
<xsl:value-of select="Name/FirstName"/>
<xsl:text> </xsl:text>
<xsl:value-of select="Name/LastName"/> <br />
</p>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
[xsl] Grouping problem - Duplicates
Subject: [xsl] Grouping problem - Duplicates From: Sarah <sarah10@xxxxxxxxxxx> Date: Fri, 30 Apr 2004 11:31:54 +0200 |
Hi,
I am new to XSLT. I am trying to sort an XML file and display the output as a simple html report with no repetitions.
I cannot find the way to do it.
I would appreciate help, very much.
Thanks, Sarah
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
But I get:
Sales People by Areas
Center
Dave lName Samuel John lName Supp 1 Kathy lName Supp 2 Dan lName Supp 3 Dave lName Samuel John lName Supp 1 Kathy lName Supp 2 Dan lName Supp 3 Dave lName Samuel John lName Supp 1 Kathy lName Supp 2 Dan lName Supp 3 John lName Supp 1 Dan lName Supp 3
North
John lName Supp 1 Kathy lName Supp 2 George lName Apprentice Dave lName Samuel Dan lName Supp 3 John lName Supp 1 Kathy lName Supp 2 Dan lName Supp 3
South
John lName Supp 1 Kathy lName Supp 2 Dave lName Samuel Dan lName Supp 3 John lName Supp 1 Kathy lName Supp 2 Dan lName Supp 3
This is the stylesheet I used (called: sales_by_area.xsl):
<xsl:key name="areas" match="//Area/*" use="name()"/> <xsl:key name="supplier-list" match="SalesPerson" use="Supplier"/> <xsl:key name="fullName" match="SalesPerson" use="Name"/>
<xsl:template match="/">
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="description" content="Suppliers by Sales People" />
<link href="text.css" rel="stylesheet" type="text/css" />
<title>Your company</title>
</head>
<body>
<h1>Sales People by Areas <br /></h1>
<xsl:for-each select="//Area/*[generate-id(.)=generate-id(key('areas', name()))]">
<xsl:sort select="key('areas', name())"/>
<h2><xsl:value-of select="name()"/></h2>
<xsl:for-each select="key('areas', name())">
<xsl:sort select="key('areas', text())"/>
<xsl:variable name="supplier_name" select="text()">
</xsl:variable>
<xsl:variable name="area_name" select="name()">
</xsl:variable>
<xsl:for-each select="//SalesPerson[generate-id()=generate-id(key('fullName', Name))]">
<xsl:sort select="key('fullName', Name)"/>
<xsl:apply-templates select="Name">
<xsl:with-param name="curr_supp" select="$supplier_name"/>
<xsl:with-param name="curr_area" select="$area_name"/>
</xsl:apply-templates>
</xsl:for-each>
</xsl:for-each> </xsl:for-each>
</body> </html> </xsl:template>
<xsl:template match="Name"> <xsl:param name="curr_supp"/> <xsl:param name="curr_area"/>
<xsl:variable name="fName" select="."> </xsl:variable>
<xsl:for-each select="//SalesPerson[generate-id()=generate-id(key('supplier-list', Supplier))]">
<xsl:sort select="key('supplier-list', Supplier)"/>
<xsl:for-each select="key('supplier-list', $curr_supp)">
<xsl:if test="$fName = Name">
<xsl:if test="Supplier = $curr_supp">
<p class="textenglish">
<xsl:value-of select="Name/FirstName"/>
<xsl:text> </xsl:text>
<xsl:value-of select="Name/LastName"/> <br />
</p>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:template> </xsl:stylesheet>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xsl:variable with a xsl:c, David Carlisle | Thread | RE: [xsl] Grouping problem - Duplic, Michael Kay |
Re: [xsl] xsl:variable with a xsl:c, David Carlisle | Date | [xsl] xmlns="" ??, Arthur Maloney |
Month |
Keywords