我根据某些条件创建了一个列表(xml的文档片段),并希望根据列表中的一个属性进行排序?我怎样才能做到这一点?
这是呼叫模板
<xsl:call-template name="tempDiagnosisByNomenId">
<xsl:with-param name="dxNomenId" select="$nomenId"/>
<xsl:with-param name="dxList" select="key('keyDxByNomenId', $nomenId, $root-node)[@is-active='true']"/>
<xsl:with-param name="hasDxOrders" select="$hasDxOrders"/>
</xsl:call-template>我想根据属性对参数dxList进行排序,然后将其发送给函数。
发布于 2018-09-10 17:07:48
在没有看到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,然后可以通过在select表达式中调用该函数来使xsl:with-param更紧凑。
在具有高阶函数支持的XSLT3中,您可以直接使用sort函数,例如
<xsl:with-param name="dxList" select="sort(key('keyDxByNomenId', $nomenId, $root-node)[@is-active='true'], (), function($node) { $node/@some-attribute })"/>https://stackoverflow.com/questions/52252142
复制相似问题