Трудно задавать вопросы, не видя ввод XML, но если вы измените
<xsl:with-param name="dxList" select="key('keyDxByNomenId', $nomenId, $root-node)[@is-active='true']"/>
до
<xsl:with-param name="dxList" as="node()*">
<xsl:perform-sort select="key('keyDxByNomenId', $nomenId, $root-node)[@is-active='true']">
<xsl:sort select="@some-attribute"/>
</xsl:perform-sort>
</xsl:with-param>
тогда узлы, возвращаемые вызовом функции key
, должны передаваться как параметр dxList
, отсортированный по атрибуту some-attribute
, а не в обычном порядке документа, который возвращает вызов функции key
. Смотрите спецификацию на perform-sort
https://www.w3.org/TR/xslt20/#element-perform-sort.
В качестве альтернативы вы можете определить функцию с xsl:function
, которая имеет один входной параметр и использует xsl:perform-sort
в теле функции, тогда вы можете сделать xsl:with-param
более компактным, вызвав эту функцию в select
выражение.
А в XSLT 3 с поддержкой функций более высокого порядка вы можете использовать функцию sort
напрямую, например,
<xsl:with-param name="dxList" select="sort(key('keyDxByNomenId', $nomenId, $root-node)[@is-active='true'], (), function($node) { $node/@some-attribute })"/>