Сортировка XML-тегов в XSLT выполняется с использованием элемента <xsl:sort select="attribute">
Этот элемент должен размещаться внутри xsl:apply-templates или xsl:for-each. Сортировка может выполняться как по самим xml-тегам, так и по их атрибутам, порядок сортировки можно задавать по возрастанию или по убыванию.
Прототип:
<xsl:sort select = string-expression lang = { nmtoken } data-type = { "text" | "number" | qname-but-not-ncname } order = { "ascending" | "descending" } case-order = { "upper-first" | "lower-first" } />
XSL-шаблон для форматированного отображения XML данных (сортировка по параметру):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/document"> <html> <head> <title><xsl:value-of select="title"/></title> </head> <body> <!-- Выбираем узлы structure --> <xsl:apply-templates select="structure"> <xsl:sort select="@id" order="descending"/> </xsl:apply-templates> </body> </html> </xsl:template> <!-- Шаблон для отображения узлов /document/structure --> <xsl:template match="structure"> <p>Значение: <xsl:value-of disable-output-escaping="yes" select="value"/></p> </xsl:template> </xsl:stylesheet>
Сортировка по значению тега
<xsl:apply-templates select="structure"> <xsl:sort select="value" order="descending"/> </xsl:apply-templates>
В результате получится HTML-документ:
<html> <head> <title>Заголовок 1</title> </head> <body> <p>Значение: bbb</p> <p>Значение: aaa</p> </body> </html>