Сортировка данных в XSLT, осуществляется при помощи тега <xsl:sort/>
в <xsl:for-each/>
или в <xsl:apply-templates/>
. В <xsl:sort/>
передаются атрибуты: select
, data-type
и order
. В select
передается значения поля, по которому надо осуществить сортировку. Атрибут data-type
отвечает за тип сортировки, текстовая или числовая, соответственно можно передать два значения: text
(текстовая сортировка, стоит по умолчанию) и number
(числовая сортировка). Атрибут order
отвечает за направление сортировки, передается два значения: ascending
(сортировка по возрастанию, стоит по умолчанию) и descending
(сортировка по убыванию).
Более подробное описание тега <xsl:sort>
https://www.w3schools.com/xml/ref_xsl_el_sort.asp
XML
Например есть список городов, с населением.
Таблица с данными по-умолчанию будет выглядеть так:
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
подставляются значения по умолчанию.
Результат
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"
.
Результат
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:sort/>
, необходимо заполнить атрибут select="population"
и data-type="number"
, в атрибуте order
, значение ascending
стоит по умолчанию.
Результат
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"
.
Результат
ID | Город | Население, тыс. |
---|---|---|
9 | Москва | 12506 |
3 | Санкт-Петербург | 5352 |
5 | Новосибирск | 1613 |
6 | Екатеринбург | 1469 |
2 | Нижний Новгород | 1259 |
7 | Казань | 1244 |
1 | Челябинск | 1202 |
10 | Омск | 1172 |
4 | Самара | 1163 |
8 | Ростов-на-Дону | 1130 |