Объявление шаблона

Объявление шаблона задается элементом xsl:template, который имеет следующий синтаксис:

<xsl:template

match="образец"

name="имя"

priority="число"

mode="режимы"

as="тип"

> .

<!--

Содержимое: элементы xsl:param,

конструктор-последовательности

-->

</xsl:template>

 

Это объявление определяет шаблон, который содержит 0 и более элементов xsl:param, а также конструктор последовательности для создания набора узлов и/или атомарных значений.

Все атрибуты элемента xsl:template являются необязательными.

Атрибут match задает образец узлов дерева, для которых необходимо применить преобразования. Если элемент xsl:template содержит атрибут match, он называется правилом шаблона.

Правила шаблона вызываются при помощи инструкции xsl:apply-templates.

Объявление шаблона также может иметь имя, определяемое атрибутом name. Такое объявление называется именованным шаблоном.

Именованные шаблоны вызываются при помощи инструкции xsl:call-template.

Именованные шаблоны могут вызываться вне зависимости от текущего контекста, и даже вести себя как функции – принимать на вход параметры и возвращать не­которые значения.

При объявлении шаблона нужно обязательно указать хотя бы один из атрибутов match или name, причем эти атрибуты могут присутствовать в xsl:template одновременно. Если атрибут match не задан, атрибуты priority и mode игнорируются.

Атрибут priority используется для определения числового значения, которое называ­ется приоритетом шаблона (чем больше число, тем больше приоритет). Это значение используется для раз­решения конфликтов шаблонов в случае, когда один узел может быть обра­ботан различными объявлениями шаблонов. Если атрибут не priority задан, используются довольно сложные правила приоритета по умолчанию, зависящие от выражения в атрибуте match. Упрощенно можно считать, что более точно определенный образец имеет более высокий приоритет, чем менее точно определенный, т.е. правило с образцом "/message/header" имеет более высокий приоритет, чем правило "//header".

Атрибут mode определяет режим или режимы обработки данного объявления шаблона. Режимы задаются как идентификаторы типа token, отделенные друг от друга пробелами. Режимы по­зволяют задавать различные преобразования для одних и тех же частей до­кумента (имена этих режимов используются в элементе xsl:apply-templates). Существует два предопределенных имени режимов: "#default" (режим по умолчанию, действующий, когда режим не задан) и "#all" (правило действует для всех режимов).

Атрибут as задает тип возвращаемого функцией значения (один из типов XPath 2.0). Если этот атрибут задан, результат выполнения конструктора последовательности преобразуется к заданному типу. Если такое преобразование невозможно, генерируется сообщение об ошибке. Если атрибут as не задан, преобразование результата не выполняется и тип элементов результата по умолчанию становится item(), что предполагает любой тип.

Атрибуты объявления шаблона не влияют на выполнение его содержимого. Они используются элементами xsl:apply-templates и xsl:call-template при выборе шаблонов. Правила, которые были импортированы в преобразо­вание, вызываются могут быть вызваны элементом xsl:apply-imports.

В правиле шаблоне можно использовать не только элементы языка XSLT, но и строковые (литеральные) элементы.

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

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

· xsl:apply-imports;

· xsl:apply-templates;

· xsl:attribute;

· xsl:call-template;

· xsl:choose;

· xsl:comment;

· xsl:copy;

· xsl:copy-of;

· xsl:element;

· xsl:fallback;

· xsl:for-each;

· xsl:if;

· xsl:message;

· xsl:number;

· xsl:param;

· xsl:processing-instruction;

· xsl:text;

· xsl:value-of;

· xsl:variable.

Элементы xsl:param и xsl:variable в теле шаблона определяют локальные параметры и перемен­ные.

5.3.7.3. Вызов неименованных правил шаб­лона

Для применения правил шаб­лона (в которых не задан атрибут name) в XSLT используется элемент-инструкция xsl:apply-templates.

Этот элемент имеет следующий синтаксис:

<xsl:apply-templates

select="выражение"

mode="режим">

<!--

Содержимое: элементы xsl:sort или xsl:with-param

-->

</xsl:apply-templates>

 

Элемент xsl:apply-templates получает на входе последовательность узлов, соответствующих образцу, заданному в атрибуте match элемента xsl:template. Необязательный атрибут select задает выражение, результатом которого является последовательность узлов, которая является выборкой из исходной последовательности узлов. Если ат­рибут select не задан, то правила шаблона применяются ко всем дочерним узлам текущего узла, т.е. инструкция

<xsl:apply-templates/>

действует так же, как инструкция

<xsl:apply-templates select="child::node()"/>

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

 

Оба элемента xsl:template и xsl:apply-templates имеют необязательный атрибут mode. Если элемент xsl:template не имеет атрибута match, то он не должен иметь и атрибута mode. Если элемент xsl:apply-templates имеет атрибут mode, то он применяется только к тем правилам шаблона из элементов xsl:template, которые имеют атрибут mode с тем же значением, либо имеют значение атрибута mode, равное "#all". Если элемент xsl:apply-templates атрибута mode не имеет, то он применяется только к тем правилам шаблона из элементов xsl:template, которые также не имеют атрибута mode, либо имеют значение атрибута mode, равное "#default". В элементе xsl:apply-templates существует два предопределенных имени режимов: "#default" (режим, действующий по умолчанию) и "#current" (текущий режим).

 

Пример использования элементов xsl:template и xsl:apply-templates:

Вывод тем сообщений для документа XML email.xml (см. 5.1.1.5.2).

Преобразование XSLT имеет следующий вид:

 

<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" version="4.0"

encoding="windows-1251" indent="yes"/>

<!-- Формирование выходного документа HTML -->

<xsl:template match="/">Вывод тем сообщений

<html>

<head>

<title> Вывод тем сообщений</title>

</head>

<body>

<!-- Применение правила шаблона для элемента subject -->

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

</body>

</html>

</xsl:template>

<!-- Задание правила шаблона для элемента subject -->

<xsl:template match="subject">

<p>

<span

style="font-weight:bold;color:blue">Тема: </span>

<xsl:apply-templates/>

</p>

</xsl:template>

</xsl:stylesheet>

Сформированный выходной документ HTML имеет следующий вид:

<html>

<head>

<meta http-equiv="Content-Type"

content="text/html; charset=windows-1251">

<title>Вывод тем сообщений</title>

</head>

<body>

<p><span style="font-weight:bold;color:blue">

Тема: </span>Поздравление</p>

<p><span style="font-weight:bold;color:blue">

Тема: </span>Напоминание</p>

<p><span style="font-weight:bold;color:blue">

Тема: </span>Отказ</p>

<p><span style="font-weight:bold;color:blue">

Тема: </span>Вопрос</p>

<p><span style="font-weight:bold;color:blue">

Тема: </span>Ответ</p>

</body>

</html>

Вывод результата преобразования в Web-браузере будет иметь следующий вид:








Дата добавления: 2015-03-20; просмотров: 628;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.023 сек.