XSLT中的动态排序?

时间:2010-02-04 06:51:05

标签: xslt sorting

我有一些数据,我在xslt的for-each循环中输出。我在列表上进行了分页处理,但没有排序选择器。

用户应该能够对2个值(创建的数据和每个项目上的数字字段)进行排序。默认排序方法是创建日期,但是当用户单击“按编号排序”时,列表应该按数字值排序。

但是在select语句中似乎不接受varialbe($ mySort) - 关于我将如何处理这个问题的任何想法?

2 个答案:

答案 0 :(得分:2)

<xsl:sort select="*[name() = $mySort]" order="{$myOrder}" />

select表达式必须是有效的文字XPath表达式。无法在XSLT中动态评估XPath,这意味着包含 XPath字符串的变量将无效。

但是,sort属性接受一个字符串,这就是为什么你可以在这里使用一个属性值模板(花括号表达式)。

答案 1 :(得分:1)

如果你无法让变量适用于order属性,那么你可能需要付出艰难的努力。类似的东西:

<xsl:when test="$mySort = 'ascending'">
  <xsl:apply-templates>
    <xsl:sort order="ascending"/>
  </xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
  <xsl:apply-templates>
    <xsl:sort order="descending"/>
  </xsl:apply-templates>
</xsl:when>
</xsl:otherwise>