Сортировка XSL:SORT (XSLT)

Сортировка данных в XSLT, осуществляется при помощи тега <xsl:sort/> в <xsl:for-each/> или в <xsl:apply-templates/>. В <xsl:sort/> передаются атрибуты: selectdata-type и order. В select передается значения поля, по которому надо осуществить сортировку. Атрибут data-type отвечает за тип сортировки, текстовая или числовая, соответственно можно передать два значения: text (текстовая сортировка, стоит по умолчанию) и number (числовая сортировка). Атрибут order отвечает за направление сортировки, передается два значения: ascending (сортировка по возрастанию, стоит по умолчанию) и descending (сортировка по убыванию).

Более подробное описание тега <xsl:sort> https://www.w3schools.com/xml/ref_xsl_el_sort.asp

XML

Например есть список городов, с населением.

<cities> <item> <id>1</id> <city>Челябинск</city> <population>1202</population> </item> <item> <id>2</id> <city>Нижний Новгород</city> <population>1259</population> </item> <item> <id>3</id> <city>Санкт-Петербург</city> <population>5352</population> </item> <item> <id>4</id> <city>Самара</city> <population>1163</population> </item> <item> <id>5</id> <city>Новосибирск</city> <population>1613</population> </item> <item> <id>6</id> <city>Екатеринбург</city> <population>1469</population> </item> <item> <id>7</id> <city>Казань</city> <population>1244</population> </item> <item> <id>8</id> <city>Ростов-на-Дону</city> <population>1130</population> </item> <item> <id>9</id> <city>Москва</city> <population>12506</population> </item> <item> <id>10</id> <city>Омск</city> <population>1172</population> </item> </cities>

Таблица с данными по-умолчанию будет выглядеть так:

IDГородНаселение, тыс.
1Челябинск1202
2Нижний Новгород1259
3Санкт-Петербург5352
4Самара1163
5Новосибирск1613
6Екатеринбург1469
7Казань1244
8Ростов-на-Дону1130
9Москва12506
10Омск1172

<xsl:sort/> и <xsl:for-each/>

Добавив <xsl:sort/> в цикл <xsl:for-each/>, можно отсортировать значения перед их перечислением.

По названию города по возрастанию

Вывод списка городов, отсортированных по названию (по тексту), по возрастанию.

У тега <xsl:sort/>, необходимо заполнить только атрибут select="city", в data-type и order подставляются значения по умолчанию.

<table class="simple"> <tr><th>ID</th><th>Город</th><th>Население, тыс.</th></tr> <xsl:for-each select="cities/item"> <!-- Сортировка --> <xsl:sort select="city"/> <tr> <td><xsl:value-of select="id"/></td> <td><xsl:value-of select="city"/></td> <td><xsl:value-of select="population"/></td> </tr> </xsl:for-each> </table>

Результат

IDГородНаселение, тыс.
6Екатеринбург1469
7Казань1244
9Москва12506
2Нижний Новгород1259
5Новосибирск1613
10Омск1172
8Ростов-на-Дону1130
4Самара1163
3Санкт-Петербург5352
1Челябинск1202

По названию города по убыванию

Вывод списка городов, отсортированных по названию (по тексту), по убыванию.

У тега <xsl:sort/>, необходимо заполнить атрибут select="city" и order="descending".

<table class="simple"> <tr><th>ID</th><th>Город</th><th>Население, тыс.</th></tr> <xsl:for-each select="cities/item"> <!-- Сортировка --> <xsl:sort select="city" order="descending"/> <tr> <td><xsl:value-of select="id"/></td> <td><xsl:value-of select="city"/></td> <td><xsl:value-of select="population"/></td> </tr> </xsl:for-each> </table>

Результат

IDГородНаселение, тыс.
1Челябинск1202
3Санкт-Петербург5352
4Самара1163
8Ростов-на-Дону1130
10Омск1172
5Новосибирск1613
2Нижний Новгород1259
9Москва12506
7Казань1244
6Екатеринбург1469

<xsl:sort/> и <xsl:apply-templates/>

Добавив <xsl:sort/> в вызов применения шаблона <xsl:apply-templates/>, можно отсортировать значения перед их перечислением.

<xsl:template/>

Следующий <xsl:template match="cities/item"/> будет использоваться для вывода города.

<xsl:template match="cities/item"> <tr> <td><xsl:value-of select="id"/></td> <td><xsl:value-of select="city"/></td> <td><xsl:value-of select="population"/></td> </tr> </xsl:template>

По численности населения, по возрастанию

Вывод списка городов, отсортированных по численности население (по числу), по возрастанию.

У тега <xsl:sort/>, необходимо заполнить атрибут select="population" и data-type="number", в атрибуте order, значение ascending стоит по умолчанию.

<h2>По численности населения, по возрастанию</h2> <table class="simple"> <tr><th>ID</th><th>Город</th><th>Население, тыс.</th></tr> <xsl:apply-templates select="cities/item"> <!-- Сортировка --> <xsl:sort select="population" data-type="number"/> </xsl:apply-templates> </table>

Результат

IDГородНаселение, тыс.
8Ростов-на-Дону1130
4Самара1163
10Омск1172
1Челябинск1202
7Казань1244
2Нижний Новгород1259
6Екатеринбург1469
5Новосибирск1613
3Санкт-Петербург5352
9Москва12506

По численности населения, по убыванию

Вывод списка городов, отсортированных по численности население (по числу), по возрастанию.

У тега <xsl:sort/>, необходимо заполнить атрибут select="population"data-type="number" и order="descending".

<h2>По численности населения, по убыванию</h2> <table class="simple"> <tr><th>ID</th><th>Город</th><th>Население, тыс.</th></tr> <xsl:apply-templates select="cities/item"> <!-- Сортировка --> <xsl:sort select="population" data-type="number" order="descending"/> </xsl:apply-templates> </table>

Результат

IDГородНаселение, тыс.
9Москва12506
3Санкт-Петербург5352
5Новосибирск1613
6Екатеринбург1469
2Нижний Новгород1259
7Казань1244
1Челябинск1202
10Омск1172
4Самара1163
8Ростов-на-Дону1130

Категории

Веб-дизайнXSLTxsl:for-eachxsl:apply-templatesxsl:template

Читайте также

Комментарии