
- •XSLT
- •XPath
- •Шаг доступа состоит из трех частей: необязательной оси, проверки узла и необязательного предиката.
- •Оси выборки XPath
- •Оси — это база языка XPath.
- •Дочерняя ось и ось потомков
- •Оси братьев
- •Родительская ось и ось
- •Предикат
- •Операторы и специальные символы
- •Функции множеств узлов
- •Функция: number sum(node-set) возвращает сумму результатов преобразований строковых значений всех узлов в аргументном
- •Функция: string string(object?) преобразует объект в строку
- •Проверки типов узлов
- •string-length
- •Выбираются все атрибуты @id //@id
- •В общем случае в преобразовании участвуют три документа:
- •Процесс обработки делится на три стадии.
- •XSLT имеет некоторые ограничения:
- •xsl:stylesheet
- •xsl:template
- •Атрибуты элемента xsl:template
- •Корневое правило
- •xsl:value-of
- •Когда для каждого узла из некоторого набора требуется выполнить однотипную обработку, то применяется
- •В предыдущих примерах таблице полностью с тегов в XML-файле. изменять. Добавим в тег
- •xsl:sort
- •Условия
- •Элемент XSL:IF - фильтр
- •Переменные в XSLT
- •xsl:apply-templates
- •xsl:number
- •Атрибут format позволяет определить форматную строку, используемую как шаблон при выводе номера. Например,
- •from- указывающий, с какой точки начинается отсчет.
- •xsl:choose
- •xsl:attribute
- •Параметры в XSLT

XSLT
XSLT (eXtensible Stylesheet Language Transformations), язык преобразования XML документов, является рекомендованным языком таблиц стилей для XML.

XPath
XPath представляет собой язык задания путей к элементам XML- документа. Разработан для организации доступа к частям документа XML в файлах трансформации XSLT и является стандартом консорциума W3C.

Шаг доступа состоит из трех частей: необязательной оси, проверки узла и необязательного предиката.
Базовая форма синтаксиса имеет следующий вид:
ось::узел[предикат]

Оси выборки XPath
Ось определяет древовидную связь между узлом контекста и узлами, которые выбираются шагом определения расположения. Другими словами, ось указывает общее направление, в котором выполняется шаг определения расположения по отношению к узлу контекста.
В языке XPath понятие оси служит для того, чтобы выделить в дереве документа различные подмножества узлов относительно некоторого узла, называемого контекстным.

Оси — это база языка XPath.
ancestor:: — Возвращает множество предков.
ancestor-or-self:: — Возвращает множество предков и текущий элемент.
attribute:: — Возвращает множество атрибутов текущего элемента.
child:: — Возвращает множество потомков на один уровень ниже.descendant:: — Возвращает полное множество потомков.
descendant-or-self:: — Возвращает полное множество потомков и текущий элемент.
following:: — Возвращает необработанное множество, ниже текущего элемента.
following-sibling:: — Возвращает множество элементов на том же уровне, следующих за текущим.
parent:: — Возвращает предка на один уровень назад.
preceding:: — Возвращает множество обработанных элементов исключая множество предков.
preceding-sibling:: — Возвращает множество элементов на том же уровне, предшествующих текущему.
self:: — Возвращает текущий элемент.

Дочерняя ось и ось потомков
Дочерняя ось принимается в XPath по умолчанию. Иными словами, явно указывать ось child:: необязательно. Спуститься по XMLдереву глубже, чем на один уровень, позволяют оси descendant:: и descendantorself::. Первая не включает сам контекстный узел, вторая – включает.

|
(: Отобрать все дочерние элементы с именем X :) |
|
<Test id="descendants"> |
||
<parent> |
X (: то же, что child::X) |
|
<X id="1"/> |
Результат: <X id="1"/> <X id="2"/> <X id="4"/> <X |
|
id="7"/> <X id="8"/> |
||
<X id="2"/> |
(: Отобрать первый дочерний элемент с именем X :) |
|
<Y id="3"> |
X[1] |
|
Результат: <X id="1"/> |
||
<X id="3-1"/> |
||
(: Отобрать последний дочерний элемент с именем X :) |
||
<Y id="3-2"/> |
||
X[last()] |
||
<X id="3-3"/> |
Результат: <X id="8"/> |
|
</Y> |
(: Отобрать первый дочерний элемент при условии, что |
|
<X id="4"/> |
его имя X. Иначе пусто :) |
|
<Y id="5"/> |
*[1][self::X] |
|
<Z id="6"/> |
Результат: <X id="1"/> |
|
<X id="7"/> |
descendant::X |
|
Результат: <X id="1"/> <X id="2"/> <X id="3-1"/> <X |
||
<X id="8"/> |
||
id="3-3"/> |
||
<Y id="9"/> |
<X id="4"/> <X id="7"/> <X id="8"/> |
|
</parent> |
(: Отобрать контекстный узел и всех его потомков :) |
|
<Test> |
descendant-or-self::* |
Результат: <parent> <X id="1"/> <X id="2"/> <Y id="3"> <X id="3-1"/>
<Y id="3-2"/> <X id="3-3"/> </Y> <X id="4"/> <Y id="5"/> <Z id="6"/>
<X id="7"/> <X id="8"/> <Y id="9"/> </parent>

Оси братьев
Оси братьев называются precedingsibling:: и followingsibling::.
Ось precedingsibling содержит братьев, предшествующих контекстному узлу, а ось followingsibling – следующих за ним.

<!-- Тестовый документ с |
|
|
выделенным контекстным узлом |
||
—> |
|
|
<Test id="preceding-siblings"> |
||
<A id="1"/> |
(: Отобрать всех братьев с именем A, |
|
предшествующих контекстному узлу |
||
<A id="2"/> |
||
:) |
||
<B id="3"/> |
||
preceding-sibling::A |
||
<A id="4"/> |
||
Результат: <A id="1"/> <A id="2"/> |
||
<B id="5"/> |
||
<A id="4"/> |
||
<C id="6"/> |
||
(: Отобрать всех братьев с именем A, |
||
<A id="7"/> |
||
следующих за контекстным узлом :) |
||
<A id="8"/> |
||
following-sibling::A |
||
<B id="9"/> |
||
Результат: <A id="8"/> |
||
</Test> |
||
(: Отобрать всех братьев, |
||
|
||
|
предшествующих контекстному узлу |
|
|
:) |
|
|
preceding-sibling::* |
|
|
Результат: <A id="1"/> <A id="2"/> |
|
|
<B id="3"/> <A id="4"/> <B id="5"/> |

Родительская ось и ось
предков
Родительская ось (parent::) относится к родителю контекстного узла. Порождает последовательность, которая содержит в точности один элемент, если имя родителя контекстного узла – X, и пусто в противном случае.
С помощью осей ancestor:: и ancestororself:: можно перемещать ся вверх по XMLдереву (переходя к родителю, деду, прадеду и т.д.). В первом случае сам контекстный узел исключается, во втором – включается.