<xsl:variable name="output">
<xsl:for-each select="//section-02">
<xsl:sort
select="exsl:node-set($sort-titles)/*[(_at_)doc-number =
current()/doc-number]"/>
If you're lucky, the optimizer will extract
exsl:node-set($sort-titles)/*
as a subexpression that can be evaluated outside the loop.
In case you're not so lucky, it would be better to put it in a variable:
<xsl:variable name="ref" select="exsl:node-set($sort-titles)/*"/>
<xsl:variable name="output">
<xsl:for-each select="//section-02">
<xsl:sort
select="$ref[(_at_)doc-number = current()/doc-number]"/>
Or even better, use a key.
Michael Kay