Thanks for the info, I have read that article before asking
my question.
OK, you said you were a beginner, and I made the mistake of believing you.
I'm afraid this now fails my one-minute test: if I don't understand the
problem after staring at it for a minute, I leave it to someone else. Sorry!
Michael Kay
Still, I need help. I am not sure that what I want to get as
output can be
done in one stylesheet (without first creating a sorted XMl
output to be
processed with a different stylesheet).
The structure of the XML file is of two "foreign"groups, <Area> and
<SalesPeople>, yet the grouping of the 2nd level sort, from
<salesPeople>,
depends on the node names from <Area>.
Sarah
Here is the question again:
---- 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>
--+------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--