是,使用這種形式的的東西:
<xsl:apply-templates select="example">
<xsl:sort select="*[name()=sortby]" data-type="{sort-data-type}"
order="{sort-order}" />
</xsl:apply-templates>
請注意,你還需要指定排序的數據類型和順序。
完整示例:
<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:template match="/*">
<xsl:copy>
<xsl:apply-templates select="example">
<xsl:sort select="*[name()=/*/sortby]" data-type="{/*/sort-data-type}"
order="{/*/sort-order}" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="example">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
當在下面的XML文檔被應用於這種轉變:
<examples>
<sortby>year</sortby>
<sort-data-type>number</sort-data-type>
<sort-order>descending</sort-order>
<example>
<year>2008</year>
<number>3</number>
</example>
<example>
<year>2012</year>
<number>2</number>
</example>
<example>
<year>2010</year>
<number>5</number>
</example>
</examples>
有用,正確的結果產生:
<examples>
<example>
<year>2012</year>
<number>2</number>
</example>
<example>
<year>2010</year>
<number>5</number>
</example>
<example>
<year>2008</year>
<number>3</number>
</example>
</examples>
如果相同的變換應用於此XML文檔上(與上述相同,但具有改變sortby
和sort-order
):
<examples>
<sortby>number</sortby>
<sort-data-type>number</sort-data-type>
<sort-order>ascending</sort-order>
<example>
<year>2008</year>
<number>3</number>
</example>
<example>
<year>2012</year>
<number>2</number>
</example>
<example>
<year>2010</year>
<number>5</number>
</example>
</examples>
然後再次有用,正確的結果產生:
<examples>
<example>
<year>2012</year>
<number>2</number>
</example>
<example>
<year>2008</year>
<number>3</number>
</example>
<example>
<year>2010</year>
<number>5</number>
</example>
</examples>
說明:
xsl:sort
的select
屬性可以包含任何XPath表達式,因此我們可以指定一個表達式來選擇要排序的元素的任何子元素,以使其名稱是評估另一個XPath表達式的結果。
在XSLT,典型地,所有的屬性以外select
允許* AVT * S(屬性值模板)以它們的值來指定。
可以使用[xsl:sort](http://www.w3.org/TR/xslt/#sorting) – toniedzwiedz 2012-08-07 12:02:57