Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Прежде чем двигаться дальше, опишем более подробно, что означает "применить шаблон" (англ. apply — применить, template — шаблон). Применение шаблонов — это составная часть обработки документа, которая может быть описана следующим порядком действий.
□ На первом шаге процессор вычисляет выражение, указанное в атрибуте select
. Его значением должно быть множество узлов. Полученное множество узлов упорядочивается и становится текущим списком узлов контекста преобразования.
□ Для каждого из узлов этого списка процессор находит наиболее подходящий шаблон для обработки. Процессор делает этот узел текущим и затем выполняет в измененном контексте выбранное шаблонное правило.
□ Дерево, которое является результатом выполнения шаблона, добавляется в выходящее дерево.
Применительно к нашему примеру с para
и bold
, мы можем изменить преобразование так, что в создаваемый элемент p будет включаться не текстовое значение элемента para, а результат обработки его дочерних узлов.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Проследим за процессом выполнения этого преобразования.
□ Обработка начинается с корневого узла дерева. Для него нет заданных шаблонных правил, значит, применено будет правило по умолчанию — обработать все дочерние узлы. Множество дочерних узлов корня содержит единственный элемент para
, значит, текущий список узлов контекста будет состоять из одного узла. Для него в преобразовании определен шаблон, который и будет выполнен процессором.
□ Шаблон, соответствующий элементу para
, создает элемент p
, содержимым которого будет результат выполнения инструкции xsl:apply-templates
, то есть результат применения шаблонов к дочерним узлам текущего узла — элемента para
.
□ Единственным дочерним узлом элемента para
является элемент bold
. Процессор изменит контекст так, что текущий список узлов будет содержать только элемент bold
и выполнит соответствующее шаблонное правило, которое создаст элемент b
и включит в него узел, вычисленный инструкцией , то есть текстовый узел со строковым значением текущего узла, элемента bold
.
Три шага этого преобразования продемонстрированы на рис. 5.1.

Рис. 5.1. Процесс преобразования
Здесь слева показан текущий список узлов, посередине — дерево документа с выделенным пунктиром текущим узлом, справа — генерируемое выходящее дерево.
Результатом этого преобразования будет документ:
text
Рассмотрим чуть более сложное преобразование документа:
text1
text2
Порядок действий в этом случае будет приблизительно следующим.
□ Первым обрабатывается корневой узел. Процессор применяет шаблоны к дочерним узлам (вернее к одному дочернему узлу — элементу para
).
□ Шаблон, обрабатывающий элемент para, создает в выходящем документе элемент p и применяет шаблоны к своим дочерним узлам — на этот раз их два, bold
и para
.
□ Шаблон, обрабатывающий элемент bold
, создает в выходящем документе элемент b
и текстовый узел со значением " text1
".
□ Шаблон, обрабатывающий элемент para
, создает в выходящем дереве узел p
и применяет шаблоны к дочерним узлам.
□ Единственным дочерним узлом элемента para
является элемент bold
.
□ Шаблон, обрабатывающий этот элемент bold
, создает в выходящем документе элемент b
и текстовый узел со значением " text2
".
Процесс преобразования показан на рис. 5.2.

Рис. 5.2. Процесс преобразования
Результатом этого преобразования будет документ:
text1
text2
Атрибут select
элемента xsl:apply-templates
позволяет выбирать, к каким именно узлам будет применяться этот шаблон. Значение select
— это XPath-выражение, которое должно возвращать множество узлов. В случае, если атрибут select
указан, шаблоны будут поочередно применяться к каждому из узлов выбранного множества.
Если при обработке элементов para мы хотим обрабатывать только дочерние элементы bold
и никакие другие, шаблон обработки элементов para
будет записан следующим образом:
Результатом обработки документа
text1
text2
будет теперь
text1
Элемент para
, который во входящем документе включен в другой элемент para
, не будет обработан по той простой причине, что он не вошел во множество, выбранное XPath-выражением " bold
". В то же время, если мы запишем
то результат будет таким же, как и прежде:
text1
text2
Следует хорошо понимать разницу между атрибутом select
элемента xsl:apply-templates
и атрибутом match
элемента xsl:template
. Атрибут match
содержит не XPath-выражение, а паттерн XSLT; в отличие от атрибута select в xsl:apply-templates
он не выбирает никакого множества узлов, он используется только для того, чтобы проверить, может ли данный узел обрабатываться этим шаблоном или нет.
Атрибут select
элемента xsl:apply-templates
наоборот, содержит не паттерн, а выражение, единственным требованием к которому является то, что оно должно возвращать множество узлов. Например, некорректным будет определение вида
поскольку выражение para+1
не может возвратить множество узлов.
Кроме этого требования, никаких других ограничений на выражения в этом атрибуте нет. В нем можно использовать переменные, содержащие множества узлов, функции, возвращающие множества узлов (например, такие, как id
или key
), выражения с операциями над множествами (именно таким выражением — выражением объединения было выражение bold|para
), пути выборки, фильтрующие выражения, в общем, любые выражения, которые только могут возвращать множества. Например, для того, чтобы обработать содержимое произвольного внешнего XML-документа, в атрибуте select
элемента xsl:apply-template
следует использовать функцию document
.
Объявление вида
применит шаблоны ко всем элементам para
документа a.xml
.
Режимы
Очень часто в преобразованиях требуется обрабатывать одни и те же узлы, но разными способами . Типичным примером такого рода задачи является генерация оглавления документа вместе с преобразованием его содержимого. Очевидно, что просто шаблонами здесь не обойтись, и чтобы не получить другой результат, нужно каким-то образом указывать, что по-другому должна вестись и обработка.
Читать дальшеИнтервал:
Закладка: