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