我有一个 ASP.NET 网页,它有几个 XSLT 来转换 xml 文件中的数据。XSLT 处理数据并将其呈现在一个表中。
是否可以允许用户单击每个表格标题以按升序或降序对值进行排序?
后端代码在 VB.net 中以防万一?
是的,只需将排序顺序和数据类型作为参数传递给转换:
这是一个简短的例子:
<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>