Subject: Re: [xsl] Text Table with sorting From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Thu, 25 Sep 2003 17:39:33 +0100 |
Hi Ryan, > I have accomplished this by first figuring out what column has the > most entries (in the example below this would be maritalStatus). > Then I do a for-each on that column, and print out each entry by > indexing the three node-sets. The problem is, since I am doing only > one for-each loop I can't seem to sort multiple columns. This is a tough problem. To be honest, I'd approach it using two steps: one to do the sorting and the other to arrange the columns. In other words, create an intermediate representation like: <person> <maritalStatus refDate="1997-01-15">marriage</maritalStatus> <religion refDate="1996-12-02">Lutheran</religion> <maritalStatus refDate="1993-06-24">divorce</maritalStatus> <maritalStatus refDate="1989-04-11">marriage</maritalStatus> <religion refDate="1968-04-05">Roman Catholic</religion> <dateOfBirth>1968-04-05</dateOfBirth> </person> (which is simply a matter of sorting by @refDate), and then to your desired output, using your current method of indexing into the three node-sets of <maritalStatus>, <religion> and <dateOfBirth> elements. An alternative, one-pass solution, is to use a template to get the element in a particular (sorted) position; something like: <xsl:template name="get-item-in-sorted-list"> <xsl:param name="list" select="/.." /> <xsl:param name="index" /> <xsl:for-each select="$list"> <xsl:sort select="@refDate" /> <xsl:if test="position() = $index"> <xsl:apply-templates select="." /> </xsl:if> </xsl:for-each> </xsl:template> Then, rather than: > <xsl:call-template name="print-entry"> > <xsl:with-param name="entry" select="$left[ $for-each-pos ]"/> > </xsl:call-template> use something like: <xsl:call-template name="print-entry"> <xsl:with-param name="entry"> <xsl:call-template name="get-item-in-sorted-list"> <xsl:with-param name="list" select="$left" /> <xsl:with-param name="index" select="$for-each-pos" /> </xsl:call-template> </xsl:with-param> </xsl:call-template> By the way, if you can switch to XSLT 2.0 (using Saxon 7.6.5), this becomes a lot easier... Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Text Table with sorting, Ryan Sawatzky | Thread | Re: [xsl] Text Table with sorting, Ryan Sawatzky |
[xsl] Problems selecting the right , Adam van den Hoven | Date | RE: [xsl] Problems selecting the ri, Kienle, Steven C [PG |
Month |