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

на главную

Жанры

Технология XSLT

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

Шрифт:

<body><xsl:copy-of select="content/node"/></body>

 </html>

</xsl:template>

<xsl:template name="head">

 <head>

<meta name="keywords" content="XSLT, XPath, XML"/>

<meta name="description"

content="This site is dedicated to XSLT and Xpath."/>

<title>XSLTdev.ru - XSLT developer resource</title>

<link rel="stylesheet" type="text/css" href="#"/>

 </head>

</xsl:template>

</xsl:stylesheet>

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

<html>

 <head>

<meta name="keywords" content="XSLT, XPath, XML">

<meta name="description"

content="This site is dedicated to XSLT and Xpath.">

<title>XSLTdev.ru - XSLT developer resource</title>

<link rel="stylesheet" type="text/css" href="#">

 </head>

 <body>Just a few words...</body>

</html>

Примечание

Несколько более эффективным способом использования в документе статических частей (как содержимое элемента

head
в приведенном примере) является хранение этих частей во внешних документах и вставка их в выходящий документ при помощи элемента
xsl:copy-of
и функции
document
.

В этом примере шаблон, обрабатывающий корневой элемент, фактически эквивалентен шаблону вида:

<xsl:template match="/">

 <html>

<head>

<meta name="keywords" content="XSLT, XPath, XML"/>

<meta name="description"

content="This site is dedicated to XSLT and Xpath."/>

<title>XSLTdev.ru - XSLT developer resource</title>

<link rel="stylesheet" type="text/css" href="#"/>

</head>

<body><xsl:value-of select="content"/></body>

 </html>

</xsl:template>

В принципе именованные шаблоны не обязаны иметь атрибут

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

Пример

Изменим объявление нашего шаблона head следующим образом:

<xsl:template name="head" match="head">

 ...

</xsl:template>

Теперь,

если входящий документ будет иметь вид

<page>

 <head/>

 <content>Just a few words...</content>

</page>

то результат выполнения следующих двух шаблонов будет одинаков.

Листинг 5.9. Шаблон для page — версия 1

<xsl:template match="page">

 <html>

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

<body><xsl:copy-of select="content/node/></body>

 </html>

</xsl:template>

Листинг 5.10. Шаблон для page — версия 2

<xsl:template match="page">

 <html>

<xsl:call-template name="head"/>

<body><xsl:copy-of select="content/node/></body>

 </html>

</xsl:template>

В чем же состоит разница вызова шаблона элементами

xsl:apply-templates
и
xsl:call-template
? Перечислим несколько отличий.

□ Элемент

xsl:apply-templates
применяет подходящие шаблоны к узлам определенного множества;
xsl:call-template
просто выполняет тело фиксированного именованного шаблона.

□ При вызове шаблона инструкцией

xsl:apply-templates
происходит изменение контекста — обрабатываемое множество узлов становится текущим списком узлов преобразования, а обрабатываемый узел — текущим узлом;
xsl:call-template
не изменяет контекст преобразования.

□ Инструкция

xsl:apply-templates
позволяет использовать различные режимы — применяются только те шаблоны, значение атрибута
mode
которых равно значению этого атрибута у вызывающей инструкции;
xsl:call-template
выполняет шаблон с заданным именем вне зависимости от того, в каком режиме происходит обработка и каково значение атрибута
mode
этого шаблона.

□ Если для обработки определенного узла подходит несколько шаблонов, то при выполнении

xsl:apply-templates
процессор будет выбирать наиболее подходящий из них;
xsl:call-template
всегда будет выполнять тот единственный шаблон преобразования, который имеет указанное имя.

□ Если в преобразовании не определен шаблон для обработки некоторого узла, но к нему элементом

xsl:apply-templates
все же применяются шаблоны, процессор будет использовать шаблон обработки по умолчанию; если элемент
xsl:call-template
вызывает отсутствующий шаблон, процессор выдаст сообщение об ошибке, потому что не сможет найти шаблон с заданным именем.

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

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Сильнейший ученик. Том 2

Ткачев Андрей Юрьевич
2. Пробуждение крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сильнейший ученик. Том 2

Нищенка в элитной академии

Зимина Юлия
4. Академия юных сердец
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Нищенка в элитной академии

Назад в СССР 5

Дамиров Рафаэль
5. Курсант
Фантастика:
попаданцы
альтернативная история
6.64
рейтинг книги
Назад в СССР 5

Столичный доктор. Том III

Вязовский Алексей
3. Столичный доктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Столичный доктор. Том III

Секретарша генерального

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46
рейтинг книги
Секретарша генерального

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Идеальный мир для Социопата 3

Сапфир Олег
3. Социопат
Фантастика:
боевая фантастика
6.17
рейтинг книги
Идеальный мир для Социопата 3

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Ищу жену для своего мужа

Кат Зозо
Любовные романы:
любовно-фантастические романы
6.17
рейтинг книги
Ищу жену для своего мужа

Сила рода. Том 3

Вяч Павел
2. Претендент
Фантастика:
фэнтези
боевая фантастика
6.17
рейтинг книги
Сила рода. Том 3

Крестоносец

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

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4