Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Выражения
Многие из задач, которые, так или иначе, выполняются во время преобразования, связаны с вычислением выражений. Для этих целей в XSLT используется язык XPath, который помимо выбора множеств узлов дерева может также выполнять некоторые основные операции над данными.
Несмотря на то, что XPath является самостоятельным языком, его роль в XSLT настолько велика, что здесь и далее мы будем рассматривать их как единое целое.
Можно выделить четыре основные задачи, для которых в преобразованиях используются выражения:
□ выбор узлов для обработки;
□ описание условий;
□ вычисление строковых значений, которые затем будут использованы в выходящем дереве;
□ вычисление множеств узлов, которые затем будут использованы в выходящем дереве.
Первая из задач непосредственно относится к самому процессу преобразования. Выражения, содержащиеся в атрибутах select
элементов xsl:apply-templates
и xsl:for-each
, вычисляют множества, к узлам которых нужно применить шаблоны.
В этом шаблонном правиле содержатся два элемента xsl:apply-templates
, которые применяют шаблоны к множествам, выбранным выражениями HEAD
и BODY
соответственно.
Логические выражения XPath могут использоваться в качестве условий в таких элементах, как xsl:if
и xsl:when
, обеспечивая условную обработку.
Предположим, что нам нужно выводить различные сообщения в зависимости от возрастной информации, присутствующей во входящем документе:
Johnny
19
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Welcome,
.
Sorry,
, access denied.
Выделенные выражения age >= 21
и age < 21
(сущности >
и <
обозначают символы " <
", и " >
") определяют условия: содержимое первого элемента xsl:if
будет выполняться, только если значение элемента age
было не меньше 21
; содержимое второго — только если значение age
было строго меньше 21
. Этот же самый шаблон может быть переписан с использованием элементов xsl:choose
, xsl:when
и xsl:otherwise
.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Welcome,
.
Sorry,
, access denied.
Результатом этого преобразования будет текст
Sorry, Johnny, access denied.
В этой строке имя johnny
было заимствовано из входящего документа. Оно было создано элементом xsl:value-of
:
Этот элемент вычислил значение выражения name
, которое было указано в его атрибуте select
, преобразовал результат вычисления в строку и создал в выходящем документе текстовый узел, содержащий вычисленное значение.
В данном случае выражение name
использовалось для генерации символьных данных. Между тем, выражения вполне пригодны и для того, чтобы создавать в выходящем документе целые фрагменты:
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
John
19
Элемент xsl:copy-of
, который использовался в этом преобразовании, делает примерно то же самое, что и xsl:value-of
— вычисляет значение выражения и включает его в дерево выходящего документа. Главным отличием xsl:copy-of
является то, что при его выполнении вычисленное выражение не преобразуется в строку, что позволяет копировать в выходящее дерево множества узлов и результирующие фрагменты. В приведенном выше примере элементы name
и age
выходящего документа являются копиями элементов name
и age
входящего документа.
В преобразованиях выражения могут использоваться только в атрибутах элементов и никогда — в тексте самого преобразования. Элемент
age
будет скопирован в выходящий документ, содержащий текст " age
". Ни о каком вычислении выражения age
речь, конечно же, не идет. Для того чтобы в результирующий документ был скопирован результат вычисления выражения, оно должно быть заключено в атрибут одного из вычисляющих элементов, например, xsl:copy-of
:
В этом случае в элемент reason будет включен результат вычисления выражения age
.
Виды выражений
Выражения языка XPath можно условно разделить на несколько основных типов:
□ пути выборки;
□ выражения фильтрации множеств;
□ выражения объединения множеств;
□ сравнения;
□ логические операции;
□ вызовы функций.
Рассмотрим подробно назначение и принципы работы каждого из типов выражений.
Пути выборки
Путь выборки является самым главным видом выражений, которые применяются в XSLT. Путь выборки в соответствии с некоторыми критериями выбирает множество узлов входящего документа.
Путь выборки может быть абсолютным (отсчитываться от корневого узла дерева) или относительным (отсчитываться от контекстного узла). Он может состоять из нескольких шагов выборки, каждый из которых относительно предыдущего шага (или начального узла) выбирает некоторое множество узлов. Результатом вычисления пути выборки является множество узлов, выбранное его последним шагом.
Предположим, что нам нужно получить узел элемента title
, находящийся в элементе head
, который находится в элементе html
, находящемся в корне документа. Соответствующий путь выборки будет выглядеть как:
/html/head/title
Означает он примерно следующее:
□ " /
" — ведущая косая черта обозначает абсолютный путь выборки, то есть путь, который отсчитывается от корневого узла;
□ " html
" — шаг выборки элементов html
;
□ " /
" — разделитель шагов выборки;
□ " head
" — шаг выборки элементов head
;
□ " /
" — разделитель шагов выборки;
□ " title
" — шаг выборки элементов title
.
Поскольку каждый из шагов отсчитывается от результатов предыдущего, шаг " html
" будет выбирать элементы html
, являющиеся дочерними элементами корневого узла и так далее. Пошаговое вычисление этого пути можно описать следующим образом:
□ " /
" — путь, который выбирает корневой узел;
□ " /html
" — путь, который выбирает дочерние элементы html
корневого узла;
□ " /html/head
" — путь, который выбирает дочерние элементы head
элементов html
, находящихся в корне документа;
□ " /html/head/title
" — путь, выбирающий дочерние элементы title
субэлементов head
элементов html
, которые находятся в корне документа.
Интервал:
Закладка: