Чтение онлайн

на главную

Жанры

Технология XSLT

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

Шрифт:

В качестве первого примера XSLT-преобразования, который будет приведен в этой книге, мы рассмотрим классическую программу

"Hello, world!"
. Листинг 2.1 показывает XSLT-интерпретацию
"Hello, world!"
, когда мы преобразуем документ

<msg>Hello, world!</msg>

в документ вида:

<message>Hello, world!</message>

Листинг 2.1. Преобразование "Hello, world!"

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="msg">

<message>

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

</message>

 </xsl:template>

</xsl:stylesheet>

Исходный

код, представленный выше, является хорошо оформленным XML-документом. Корневым его элементом является элемент
xsl:stylesheet
, который и обозначает преобразование. Атрибут
version
указывает на версию языка XSLT, в соответствии с которой был построен этот документ; помимо этого в элементе
xsl:stylesheet
объявляется пространство имен с префиксом
xsl
, которому соответствует URI
"http://www.w3.org/1999/XSL/Transform"
. Все элементы преобразования, принадлежащие пространству имен с этим URI, будут восприняты процессором, как принадлежащие языку XSLT.

Элемент

xsl:stylesheet
имеет один-единственный дочерний элемент
xsl:template
, который и задает правило преобразования. Атрибут
match
указывает, что это правило должно обрабатывать элемент
msg
. Содержимое
xsl:template
является телом шаблона. Оно выполняется тогда, когда сам шаблон применяется к некоторой части документа. В данном случае тело шаблона будет выполнено, когда само правило будет применяться к элементу
msg
.

Телом шаблона является элемент

message
. В терминах XSLT, этот элемент является литеральным элементом результата: он не принадлежит пространству имен XSLT и поэтому при обработке будет просто скопирован в результирующий документ. Содержимое этого элемента будет также обработано и включено в его сгенерированную копию.

Содержимым элемента

message
является элемент
xsl:value-of
, который, в отличие от
message
принадлежит XSLT. Элемент
xsl:value-of
вычисляет XPath-выражение, заданное в его атрибуте
select
, и возвращает результат этого вычисления. XPath-выражение,
"."
, указанное в
select
, возвращает ту самую часть узла, которая обрабатывается в данный момент, иначе говоря — элемент
msg
.

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

msg
, создать в выходящем документе элемент
message
и включить в него содержимое элемента
msg
.

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

представления те же модели данных, что и для преобразуемых документов.

Совсем иным является язык XPath, который представлен в нашем примере лаконичным выражением

"."
. XPath не придерживается XML-синтаксиса, напротив, он скорее похож на синтаксис путей в операционных системах — в главе 4 мы покажем, насколько верно это сравнение.

В приведенном преобразовании участвовала и третья синтаксическая конструкция, которая называется в XSLT паттерном (от англ. pattern — образец). Паттерн

msg
, заданный в атрибуте
match
элемента
xsl:template
указывает, какая именно часть XML-документа должна быть обработана этим правилом. Синтаксически паттерны являются XPath-выражениями (но не наоборот), однако смысл их различается. XPath-выражения вычисляются и возвращают результат, паттерны же просто устанавливают соответствие некоторому образцу. В нашем преобразовании паттерн
msg
указывает, что шаблон должен обрабатывать только элементы
msg
и никакие другие.

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

"Hello, world!"
с тем, чтобы он возвращал результат в виде HTML-документа.

Листинг 2.2. Преобразование "Hello, world!"' с результатом в HTML

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/">

<html>

<head>

<title>Message</title>

</head>

<body>

<xsl:apply-templates select="msg"/>

</body>

</html>

 </xsl:template>

 <xsl:template match="msg">

<b>

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

</b>

 </xsl:template>

</xsl:stylesheet>

Результат применения этого преобразования к документу

<msg>Hello, world!</msg>

иллюстрирует листинг 2.3.

Листинг 2.3. Результат выполнения преобразования

<html>

 <head>

<title>Message</title>

 </head>

 <body>

<b>Hello, world!</b>

 </body>

</html>

В это преобразование мы добавили еще одно шаблонное правило:

<xsl:template match="/">

 <html>

<head>

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

На границе тучи ходят хмуро...

Кулаков Алексей Иванович
1. Александр Агренев
Фантастика:
альтернативная история
9.28
рейтинг книги
На границе тучи ходят хмуро...

Кодекс Охотника. Книга III

Винокуров Юрий
3. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Кодекс Охотника. Книга III

Последний попаданец 11. Финал. Часть 1

Зубов Константин
11. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 11. Финал. Часть 1

Книга пяти колец

Зайцев Константин
1. Книга пяти колец
Фантастика:
фэнтези
6.00
рейтинг книги
Книга пяти колец

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи

Купидон с топором

Юнина Наталья
Любовные романы:
современные любовные романы
7.67
рейтинг книги
Купидон с топором

Наследник в Зеркальной Маске

Тарс Элиан
8. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник в Зеркальной Маске

Совок 5

Агарев Вадим
5. Совок
Фантастика:
детективная фантастика
попаданцы
альтернативная история
6.20
рейтинг книги
Совок 5

Аномальный наследник. Том 1 и Том 2

Тарс Элиан
1. Аномальный наследник
Фантастика:
боевая фантастика
альтернативная история
8.50
рейтинг книги
Аномальный наследник. Том 1 и Том 2

Теневой путь. Шаг в тень

Мазуров Дмитрий
1. Теневой путь
Фантастика:
фэнтези
6.71
рейтинг книги
Теневой путь. Шаг в тень

Попаданка в академии драконов 2

Свадьбина Любовь
2. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
6.95
рейтинг книги
Попаданка в академии драконов 2

Гром над Империей. Часть 2

Машуков Тимур
6. Гром над миром
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Гром над Империей. Часть 2

Ритуал для призыва профессора

Лунёва Мария
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Ритуал для призыва профессора

Измена. Осколки чувств

Верди Алиса
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Осколки чувств