Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Семантика or
и and
очевидна — они соответствуют операциям логического сложения и умножения.
Результатом операции or
будет "истина", если хотя бы один из операндов является "истиной". При этом если первый операнд имеет значение true
, второй операнд не вычисляется — результат и так будет "истиной".
Результатом операции and
будет "истина", если оба операнда истинны. При этом если первый из операндов — "ложь", то второй операнд не вычисляется — результат и так будет "ложью".
Функции
Функции значительно расширяют возможности выражений. Они принимают на вход несколько аргументов и возвращают некоторый результат, который иногда является продуктом весьма замысловатого вычисления.
Функции можно условно разделить на стандартные функции , которые определены в XPath и XSLT и должны поддерживаться (хотя на самом деле поддерживаются далеко не всегда) всеми XSLT-процессорами, и функции расширения , которые могут создаваться разработчиками в дополнение к стандартным функциям.
Контекст вычисления выражений
Выражения всегда вычисляются в некотором контексте — окружении, которое зависит от того, какая часть документа обрабатывается XSLT-процессором в данный момент, и какие объявления присутствовали в самом преобразовании.
Контекст преобразования состоит из узла, называемого контекстным узлом, двух целых чисел — размера контекста и позиции в контексте, объявлений переменных, объявлений пространств имен и библиотеки функций.
Контекст самым непосредственным образом влияет на вычисление выражений. Относительные пути выборки отсчитываются от контекстного узла, вычисление многих функций также производится в зависимости от контекста. Кроме того, в выражениях нельзя использовать функции, пространства имен и переменные, не присутствующие в контексте.
Для того чтобы показать, как изменяется контекст во время преобразования, мы напишем шаблон, который заменяет все элементы входящего документа элементами вида:
name="имя элемента"
context-position="позиция в контексте"
context-size="размер контекста"
string-value="строковое значение">
...
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
name="{name()}"
context-position="{position()}"
context-size="size()"
string-value="{.}">
A
B
C
D
E
F
context-position="1" context-size="1" string-value="ABCDEF">
context-position="1" context-size="2" string-value="ABC">
context-position="1" context-size="3" string-value="A"/>
context-position="2" context-size="3" string-value="B"/>
context-position="3" context-size="3" string-value="C"/>
context-position="2" context-size="2" string-value="DEF">
context-position="1" context-size="3" string-value="D"/>
context-position="2" context-size="3" string-value="E"/>
context-position="3" context-size="3" string-value="F"/>
Модель преобразования
Во вводной главе мы говорили, что преобразования в XSLT являются наборами шаблонных правил, каждое из которых обрабатывает определенный фрагмент входящего документа с тем, чтобы сгенерировать фрагмент выходящего документа.
Контекст преобразования
При выполнении преобразования каждая из его инструкций, каждый из элементов обрабатывается в некотором контексте . Контекст преобразования состоит из двух частей: из текущего множества узлов и из текущего узла , которые показывают, что именно обрабатывается в данный момент. XSLT-процессор поочередно обрабатывает каждый из узлов текущего множества (при этом делая этот узел текущим узлом) и объединяет результаты в одно дерево.
Контекст преобразования тесно связан с контекстом вычисления выражений:
□ текущий узел контекста преобразования соответствует контекстному узлу вычисления выражений;
□ позиция текущего узла в текущем обрабатываемом множестве соответствует позиции контекста вычисления выражений;
□ размер текущего множества узлов соответствует размеру контекста вычисления выражений.
Контекст преобразования может изменяться только двумя элементами — xsl:apply-templates
и xsl:for-each
. Каждый из этих элементов вычисляет множество узлов, которое становится текущим и затем обрабатывается. После этого контекст преобразования восстанавливается до того состояния, каким он был перед обработкой.
Изменения контекста могут быть продемонстрированы на следующем примере.
June
July
August
Этому документу соответствует следующее дерево (рис. 3.19):

Рис. 3.19. Дерево входящего документа
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Забегая вперед скажем, что в изначальном контексте преобразования текущее множество состоит из единственного узла — корневого узла документа. Он становится текущим и обрабатывается соответствующим шаблоном.
В нашем случае шаблонное правило, обрабатывающее корневой узел, выглядит как:
Тело этого шаблона выполняется в том самом изначальном контексте, о котором мы только что упомянули: текущее множество состоит из корневого узла, он же является и текущим узлом. Мы можем показать контекст, выделяя текущее множество, пунктиром, а текущий узел — полужирной линией (рис. 3.20).

Рис. 3.20.Первоначальный контекст преобразования
Атрибут select
элемента xsl:apply-templates
задает выражение, вычисляющее множество узлов, которые должны быть обработаны. Выражение summer
, которое содержит этот атрибут, является относительным путем выборки, который возвращает все дочерние элементы summer
текущего узла. Поскольку текущим узлом в данном контексте является корневой узел дерева, значением выражения summer
будет множество узлов, состоящее из субэлемента summer, корневого узла.
При выполнении элемента xsl:apply-templates
процессор сделает это вычисленное множество узлов текущим множеством и начнет поочередно обрабатывать его узлы, делая их при этом текущими. Иначе говоря, выполнение элемента
сведется к выполнению шаблона, обрабатывающего элемент summer
. Этот шаблон выглядит следующим образом:
Выполняться он будет в следующем контексте (рис. 3.21):
Читать дальшеИнтервал:
Закладка: