Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Таранова / Лекция-8_XSl.pptx
Скачиваний:
59
Добавлен:
19.05.2015
Размер:
473.84 Кб
Скачать

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дереву (переходя к родителю, деду, прадеду и т.д.). В первом случае сам контекстный узел исключается, во втором – включается.

Соседние файлы в папке Таранова