Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

 • 

"имя"
— в целях расширяемости XSLT также позволяет указывать в качестве типа данных произвольное имя. В этом случае реализация сортировки полностью зависит от процессора;

 • значением атрибута

data-type
по умолчанию является
"text"
.

□ Атрибут

case-order
указывает на порядок сортировки символов разных регистров. Значениями этого атрибута могут быть
"upper-first"
, что означает, что заглавные символы должны идти первыми, или
"lower-first"
, что означает, что первыми должны быть строчные символы. К примеру, строки
"ночь"
,
"Улица"
,
"фонарь"
,
"Аптека"
,
"НОЧЬ"
,
"Фонарь"
при использовании
case-order="upper-first"
будут иметь порядок
"Аптека"
,
"НОЧЬ"
,
"ночь"
,
"Фонарь"
,
"фонарь"
,
"улица"
. При использовании
case-order="lower-first"
те же строки будут идти в порядке
"Аптека"
,
"ночь"
,
"НОЧЬ"
,
"фонарь"
,
"Фонарь"
,
"улица"
. Значение
case-order
по умолчанию зависит от процессора и языка сортировки. В большинстве случаев заглавные буквы идут первыми.

Как можно видеть, элемент

xsl:sort
определяет сортировку достаточно гибко, но вместе с тем не следует забывать, что эти возможности могут быть реализованы в процессорах далеко не полностью. Поэтому одна и та же сортировка может быть выполнена в разных процессорах по-разному.

Приведем простой пример сортировки имен и фамилий.

Рассмотрим пример.

Листинг 8.10. Входящий документ

<list>

 <person>

<name>William</name>

<surname>Gibson</surname>

 </person>

 <person>

<name>William</name>

<surname>Blake</surname>

 </person>

 <person>

<name>John</name>

<surname>Fowles</surname>

 </person>

</list>

Отсортируем этот список сначала по именам в убывающем, а затем по фамилиям в возрастающем порядке.

<xsl:template match="list">

 <xsl:copy>

<xsl:for-each select="person">

<xsl:sort select="name" order="descending"/>

<xsl:sort select="surname"/>

<xsl:copy-of select="."/>

</xsl:for-each>

 </xsl:copy>

</xsl:template>

Листинг 8.12. Выходящий документ

<list>

 <person>

<name>William</name>

<surname>Blake</surname>

 </person>

 <person>

<name>William</name>

<surname>Gibson</surname>

 </person>

 <person>

<name>John</name>

<surname>Fowles</surname>

 </person>

</list>

К сожалению, сортировкой нельзя управлять динамически. Все атрибуты элемента

xsl:sort
должны обладать фиксированными значениями.

Псевдонимы пространств имен

Любопытным фактом является то, что XML-документ, являющийся результатом выполнения XSLT-преобразования, может и сам быть XSLT- преобразованием. Иными словами, преобразования могут генерироваться другими преобразованиями. В некоторых случаях такая возможность будет очень полезна, например, входящий XML-документ может описывать преобразование, которое нужно сгенерировать.

Листинг 8.13. XML-документ, описывающий требуемое преобразование

<transform>

 <remove select="a"/>

 <replace select="b" with="B"/>

 <replace select="c" with="C"/>

</transform>

Приведенный выше документ описывает преобразование, которое должно удалять из входящего документа элементы

а
, а элементы
b
и
c
заменять элементами
B
и
C
соответственно. Такое преобразование может выглядеть следующим образом.

  • Читать дальше
  • 1
  • ...
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: