Hi.
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
Jesse M. Heines
Sent: Tuesday, July 29, 2003 11:45 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Using a reference in a sort
I am trying to sort data based on an externally referred to
value. My main XML file looks like this:
<task>
<person id="p001">
...
</person>
</task>
p001 refers to a person in another file structured like this:
<people>
<person id="p001" last="Heines" first="Jesse">
...
</person>
</people>
I can get at that person's last name by defining a variable
to point to the file:
<xsl:variable name="filePeople" select="string('people.xml')" />
and then using that variable inside a template using an xsl:value-of:
<xsl:value-of
select="document($filePeople)/people/person[(_at_)id=$strPersonID]/
@last" />
(where $strPersonID is the ID extracted from the main XML file).
What I can't seem to be able to do is sort using this field.
<xsl:apply-templates select="tasks/task">
<xsl:sort
select="document($filePeople)/people/person[(_at_)id=$strPersonID]/@last"
order="descending" />
Try <xsl:sort
select="document($filePeople)/people/person[(_at_)id=current()/person/@id]/@last"
order="descending"/> instead
</xsl:apply-templates>>
The problem is that one must use variables due to the context
node switching in this long XPath statement, but XSL won't
let me use xsl:variable inside an xsl:apply-templates
statement. The variable must be defined inside the
xsl:apply-templates tag so that it changes with each recursion.
I tried using xsl:for-each, which does allow xsl:variable
inside it, but only *after* xsl:sort, so that doesn't work either.
I would appreciate any suggestions anyone can make to address
these issues.
Thank you,
Jesse Heines, heines(_at_)cs(_dot_)uml(_dot_)edu
UMass Lowell Computer Science
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list