我有一个ASP.NET网页,它有几个XSLT来转换xml文件中的数据。 XSLT操纵数据并将其呈现在表中。
是否可以允许用户点击每个表格标题以按升序或降序对值进行排序?
后端代码在VB.net中以防万一?
答案 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>