2

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

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

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

4

1 回答 1

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>
于 2012-04-24T13:40:22.923 回答