Subject: Re: [xsl] How efficient is DVC? - A grouping example - FIXED From: "Robbert van Dalen" <juicer@xxxxxxxxx> Date: Sun, 23 Mar 2003 02:43:40 +0100 |
OK, here come the *complete * working examples. _____________ Example 1: Input: <cities> <city name="Barcelona" country="Espana"/> <city name="Paris" country="France"/> <city name="Roma" country="Italia"/> <city name="Madrid" country="Espana"/> <city name="Milano" country="Italia"/> <city name="Firenze" country="Italia"/> <city name="Napoli" country="Italia"/> <city name="Lyon" country="France"/> </cities> Stylesheet: <xsl:template match="cities"> <xsl:variable name="sorted"> <xsl:for-each select="./city"> <xsl:sort select="@country"/> <xsl:copy-of select="."/> </xsl:for-each> </xsl:variable> <xsl:variable name="sorted-tree-fragment" select="xalan:nodeset($sorted)/*"/> <!-- Gets the groups --> <xsl:variable name="groups"> <xsl:apply-templates select="$sorted-tree-fragment"/> </xsl:variable> <!-- Iterate through all the groups --> <xsl:for-each select="xalan:nodeset($groups)/*"> <xsl:variable name="country" select="@id"/> <xsl:copy> <xsl:copy-of select="@*"/> <!-- Copy the nodes with the same country --> <xsl:copy-of select="$sorted-tree-fragment[@country = $country]"/> </xsl:copy> </xsl:for-each> </xsl:template> <xsl:template match="city"> <xsl:variable name="preceding" select="./preceding-sibling::*[1]"/> <xsl:if test="not(./@country = $preceding/@country)"> <group id="{./@country}"/> </xsl:if> </xsl:template> _______________________ Second example: Input: same input Stylesheet: <xsl:template match="cities"> <xsl:variable name="sorted"> <xsl:for-each select="./city"> <xsl:sort select="@country"/> <xsl:copy-of select="."/> </xsl:for-each> </xsl:variable> <xsl:variable name="sorted-tree-fragment" select="xalan:nodeset($sorted)/*"/> <xsl:variable name="groups"> <xsl:apply-templates select="xalan:nodeset($sorted)/*[1]"/> </xsl:variable> <xsl:apply-templates select="xalan:nodeset($groups)"/> </xsl:template> <xsl:template match="city"> <xsl:variable name="preceding" select="./preceding-sibling::*[1]"/> <xsl:choose> <xsl:when test="not(./@country = $preceding/@country)"> <group id="{./@country}"> <xsl:copy-of select="."/> <xsl:apply-templates select="./following-sibling::*[1]"/> </group> </xsl:when> <xsl:otherwise> <xsl:copy-of select="."/> <xsl:apply-templates select="./following-sibling::*[1]"/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="group"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:copy-of select="./city"/> </xsl:copy> <xsl:apply-templates select="./group"/> </xsl:template> Robbert. ----- Original Message ----- From: "Mike Brown" <mike@xxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Sunday, March 23, 2003 12:59 AM Subject: Re: [xsl] How efficient is DVC? - A grouping example - FIXED > Robbert van Dalen wrote: > > This is an update on the previous post. I didn't check if the first two examples > > worked correctly (I wrote them out of the top of my head). It should now be > > fixed. Sorry for the inconvenience! > > Even with the corrections, the first example is not producing the > expected output for me. With both Saxon and Xalan, I get > > <result> > <group id=""/> > <group id="Espana"> > <city name="Barcelona" country="Espana"/> > <city name="Madrid" country="Espana"/> > </group> > <group id="France"> > <city name="Paris" country="France"/> > <city name="Lyon" country="France"/> > </group> > </result> > > Can you repost complete, working examples? > > Mike > > -- > Mike J. Brown | http://skew.org/~mike/resume/ > Denver, CO, USA | http://skew.org/xml/ > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How efficient is DVC? - A, Mike Brown | Thread | Re: [xsl] How efficient is DVC? - A, Mike Brown |
Re: [xsl] How efficient is DVC? - A, Robbert van Dalen | Date | Re: [xsl] How efficient is DVC? - A, Mike Brown |
Month |