允许在ASP.NET网页上按升序和降序对XSLT表标题进行排序

时间:2012-04-24 10:50:51

标签: asp.net xml vb.net xslt

我有一个ASP.NET网页,它有几个XSLT来转换xml文件中的数据。 XSLT操纵数据并将其呈现在表中。

是否可以允许用户点击每个表格标题以按升序或降序对值进行排序?

后端代码在VB.net中以防万一?

1 个答案:

答案 0 :(得分:1)

是的,只需将排序顺序和数据类型作为参数传递给转换

这是一个简短的例子:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pSortField" select="'age'"/>
 <xsl:param name="pSortOrder" select="'descending'"/>
 <xsl:param name="pSortDataType" select="'number'"/>

 <xsl:template match="/*">
     <xsl:copy>
       <xsl:for-each select="*">
         <xsl:sort select="*[name()=$pSortField]"
                   order="{$pSortOrder}" data-type="{$pSortDataType}"/>
         <xsl:copy-of select="."/>
       </xsl:for-each>
     </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

对以下XML文档应用此转换时:

<people>
  <person>
    <age>15</age>
    <name>Anna</name>
  </person>
  <person>
    <age>22</age>
    <name>Kim</name>
  </person>
  <person>
    <age>31</age>
    <name>Harry</name>
  </person>
  <person>
    <age>27</age>
    <name>Peter</name>
  </person>
</people>

生成所需的正确结果(所有person元素按年龄排序,按降序排列):

<people>
   <person>
      <age>31</age>
      <name>Harry</name>
   </person>
   <person>
      <age>27</age>
      <name>Peter</name>
   </person>
   <person>
      <age>22</age>
      <name>Kim</name>
   </person>
   <person>
      <age>15</age>
      <name>Anna</name>
   </person>
</people>

只需更改参数的值,即可生成其他排序结果

使用这些参数

 <xsl:param name="pSortField" select="'name'"/>
 <xsl:param name="pSortOrder" select="'ascending'"/>
 <xsl:param name="pSortDataType" select="'text'"/>

结果现在

<people>
   <person>
      <age>15</age>
      <name>Anna</name>
   </person>
   <person>
      <age>31</age>
      <name>Harry</name>
   </person>
   <person>
      <age>22</age>
      <name>Kim</name>
   </person>
   <person>
      <age>27</age>
      <name>Peter</name>
   </person>
</people>