Subject: RE: [xsl] Merging elements within a range using a key From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 2 May 2006 13:57:38 +0100 |
> > the only way to improve > > this - to make it O(C+R) rather than O(C*R) - is to hand-code a > >sort-merge join. > Since rows and categories are already sorted, this is > probably the best thing to do. It occurred to me after writing that you don't need to use recursion for this: you can do a sort on the merged node-sets and then use grouping to find the rows in each category. In 2.0, given <category name="A" start="10"/> <category name="B" start="100"/> <category name="C" start="1000"/> <category name="D" start="10000"/> <category name="E" start="100000"/> <row value="842"/> <row value="9725"/> etc you can do <xsl:variable name="merged-and-sorted"> <xsl:perform-sort select="category|row"> <xsl:sort select="self::category/@start | self::row/@value"/> </ </ <xsl:for-each-group select="$merged-and-sorted" group-starting-with="category"> <xsl:for-each select="current-group()[self::row]"> <xsl:copy> <xsl:attribute name="category" select="current-group()[1]/@name"/> <xsl:copy-of select="@*|node()"/> </xsl:copy> </ </ Michael Kay http://www.saxonica.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Merging elements within a, Mike B | Thread | Re: [xsl] Merging elements within a, David Carlisle |
[xsl] Partial sort of a schema-vali, Gierschner, Frank | Date | [xsl] Variable and parameter with s, andrew welch |
Month |