Subject: [xsl] RE: Grouping using the set:Distinct template from EXSLT From: "Vandna Sharma" <sharmav@xxxxxxxxxxxxx> Date: Tue, 17 Apr 2007 11:51:00 -0400 |
> Hi all I am very new to XSLT programming, > I am trying to do, "Grouping using the set:Distinct template from EXSLT". I am having problem when I try to debug the xml file, I am getting error message undefined template. I am using XMLspy version 5 rel.4. Below is the xml file, and xsl. > XSL file > <?xml version="1.0" encoding="utf-8"?> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:set="http://exslt.org/set" version="1.0" extension-element-prefixes="set" set:doc="http://www.exslt.org/set"> > <xsl:output encoding="utf-8" method="html" /> > <xsl:include href="style1.xsl"/> > > <!-- The essence of using the variable instead is very similar to a key table. In > this solution, all products are put into the variable (which itself is in document order):--> > <xsl:variable name="AllProducts" select="/"/> > > <!-- The variable $AllRegions will be initialized with all of the distinct > region elements. This collection of nodes is created using the > set:distinct extension function from EXSLT.org (see bottom) --> > <xsl:variable name="AllRegionsDistinct"> > <xsl:call-template name="set:distinct"> > <xsl:with-param name="nodes" select="//products/product/region" /> > </xsl:call-template> > </xsl:variable> > <xsl:variable name="AllRegions" select="$AllRegionsDistinct"/> > > > <!-- Template for root rule --> > <xsl:template match="/"> > <xsl:call-template name="Style1"/> > <h2>Grouping of Products by Region, then by Product Name </h2> > <xsl:apply-templates /> > </xsl:template> > > <!-- Template for products rule --> > <xsl:template match="products"> > > <!-- Iterate through the variable containing all of the unique regions --> > <xsl:for-each select="$AllRegions/region"> > <xsl:variable name="region" select="." /><BR></BR> > > <H3>Region: <xsl:value-of select="$region" /></H3> > > <table border="1"> > <tr> > <th>Product ID</th> > <th>Name</th> > <th>Price</th> > <th>Quantity</th> > <th>Region</th> > </tr> > > <!-- Grab the product elements that match the current retion. At this point > the products are retrived from our variable rather than the document itself--> > <xsl:for-each select="$AllProducts/products/product[region=$region]"> > <xsl:sort select="name"/> > <tr> > <td><xsl:value-of select="prodid" /></td> > <td><xsl:value-of select="name" /></td> > <td><xsl:value-of select="price" /></td> > <td><xsl:value-of select="quantity" /></td> > <td><xsl:value-of select="region" /></td> > > </tr> > </xsl:for-each> > </table> > </xsl:for-each> > </xsl:template> > > <xsl:template name="set:distinct"> > <xsl:param name="nodes" select="/.." /> > > <xsl:choose> > <xsl:when test="not($nodes)" /> > > <xsl:otherwise> > <xsl:copy-of select="$nodes[1][not(. = $nodes[position() > 1])]" /> > > <xsl:call-template name="set:distinct"> > <xsl:with-param name="nodes" select="$nodes[position() > 1]" /> > </xsl:call-template> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > </xsl:stylesheet> > > > > > > XML file > > > <?xml version="1.0" encoding="utf-8"?> > <products> > <product> > <prodid>V123049</prodid> > <name>Screen-Top Monitor Shelf</name> > <price>$59</price> > <quantity>30</quantity> > <region>NorthWest</region> > </product> > <product> > <prodid>V392039</prodid> > <name>Womens Bracelet Watch</name> > <price>$175</price> > <quantity>335</quantity> > <region>SouthWest</region> > </product> > <product> > <prodid>L930389</prodid> > <name>Tobshiba Portable DVD Player</name> > <price>$1,299</price> > <quantity> >30</quantity> > <region>NorthWest</region> > </product> > </products> > > > > > > Thanks > Vandna
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Most meaningful design do, Angela Williams | Thread | Re: [xsl] RE: Grouping using the se, James Fuller |
RE: [xsl] Most meaningful design do, Angela Williams | Date | Re: [xsl] XSLT Dead?, Steve |
Month |