Чтение онлайн

на главную - закладки

Жанры

Холзнер Стивен

Шрифт:

В следующем примере я объединяю шаблоны для элементов

<NAME>
и
<MASS>
в один шаблон. Поскольку у этих элементов разный формат, я должен обращаться с ними по-разному внутри одного и того же шаблона (что можно сделать проверкой значений оси
self::NAME
, которая возвращает непустой набор узлов, если контекстным, узлом является элемент
<NAME>
, и
self::MASS
, возвращающей непустой набор узлов, если контекстным узлом является элемент
<MASS>
):

<xsl:template match="PLANET">

 <TR>

<TD><xsl:apply-templates select="NAME"/></TD>

<TD><xsl:apply-templates select="MASS"/></TD>

<TD><xsl:apply-templates select="RADIUS"/></TD>

<TD><xsl:apply-templates select="DAY"/></TD>

 </TR>

</xsl:template>

<xsl:template match="NAME | MASS">

 <xsl:if test="self::NAME">

<xsl:value-of select="."/>

 </xsl:if>

 <xsl:if test="self::MASS">

<xsl:value-of select="."/>

<xsl:text> </xsl:text>

<xsl:value-of select="@UNITS"/>

 </xsl:if>

</xsl:template>

.

.

.

На

этом мы завершаем рассмотрение новых осей XPath. Давайте перейдем к примерам.

Примеры путей расположения

Мы изучили достаточно теории путей расположения. Но, понятно, лучше всего осваивать этот материал на примерах, поэтому я привожу следующий список примеров путей расположения (сокращенные варианты рассматриваются после этого списка):

• 

child::PLANЕТ
. Возвращает дочерние элементы
<PLANЕТ>
контекстного узла;

• 

child::text
. Возвращает все дочерние текстовые узлы контекстного узла;

• 

child::node
. Возвращает всех детей контекстного узла;

• 

attribute::UNIT
. Возвращает атрибут
UNIT
контекстного узла;

• 

descendant::PLANET
. Возвращает все элементы-потомки
<PLANET>
контекстного узла;

• 

ancestor::PLANET
. Возвращает всех предков
<PLANET>
контекстного узла;

• 

ancestor-or-self::PLANET
. Возвращает предков
<PLANET>
контекстного узла. Если контекстным узлом тоже является
<PLANET>
, возвращает также контекстный узел;

• 

descendant-or-self::PLANET
.
Возвращает элементы-потомки
<PLANET>
контекстного узла. Если контекстным узлом тоже является
<PLANET>
, возвращает также контекстный узел;

• 

self::PLANET
. Возвращает контекстный узел, если им является элемент
<PLANET>
;

• 

child::PLANET/descendant::NAME
. Возвращает элементы-потомки
<NAME>
дочерних элементов
<PLANET>
контекстного узла;

• 

child::*/child::PLANET
. Возвращает всех внуков
<PLANET>
контекстного узла;

• 

/
. Возвращает корневой узел;

• 

/descendant::PLANET
. Возвращает все элементы
<PLANET>
в документе;

• 

/descendant::PLANET/child::NAME
. Возвращает все элементы
<NAME>
с родителем
<PLANET>
в документе;

• 

child::PLANET[position=3]
. Возвращает третьего ребенка
<PLANET>
контекстного узла;

• 

child::PLANET[position=last]
. Возвращает последнего ребенка
<PLANET>
контекстного узла;

• 

/descendant::PLANET[position = 3]
. Возвращает третий элемент
<PLANET>
в документе;

• 

child::PLANETS/child::PLANET[position=4]/child::NAME[position=3]
. Возвращает третий элемент
<NAME>
четвертого элемента
<PLANET>
элемента
<PLANETS>
;

• 

child::PLANET[position>3]
. Возвращает всех детей
<PLANET>
контекстного узла после первых трех;

• 

preceding-sibling::NAME[position=2]
. Возвращает второй предыдущий элемент-брат
<NAME>
контекстного узла;

• 

child::*[self::NAME or self::MASS]
. Возвращает детей
<NAME>
и
<MASS>
контекстного узла.

• 

child::*[self::NAME or self::MASS][position=last]
. Возвращает последнего ребенка
<NAME>
или
<MASS>
контекстного узла.

Как видите, синтаксис некоторых выражений достаточно запутан, и набирать их также довольно долго. Но, как и для образцов, существует сокращенная форма синтаксиса XPath.

Сокращенный синтаксис XPath

Сокращения синтаксиса XPath могут быть весьма удобными. Ниже приведены правила:

• 

self::node
может быть сокращено как
.
;

• 

parent::node
может быть сокращено как
..
;

• 

child::childname
может быть сокращено как
childname
;

Поделиться:
Популярные книги

Наномашины, демоненок! Том 3

Новиков Николай Васильевич
3. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, демоненок! Том 3

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Алые перья стрел

Крапивин Владислав Петрович
Детские:
детские приключения
8.58
рейтинг книги
Алые перья стрел

Осколки маски

Метельский Николай Александрович
7. Унесенный ветром
Фантастика:
боевая фантастика
альтернативная история
6.71
рейтинг книги
Осколки маски

Идеальный мир для Лекаря 26

Сапфир Олег
26. Лекарь
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 26

Лекарь Империи 4

Карелин Сергей Витальевич
4. Лекарь Империи
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 4

Хозяин Стужи 5

Петров Максим Николаевич
5. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
6.60
рейтинг книги
Хозяин Стужи 5

Свет горизонта

BlackRaven
1. Свет горизонта
Фантастика:
фэнтези
6.00
рейтинг книги
Свет горизонта

Агенты ВКС

Вайс Александр
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Агенты ВКС

Вечный. Книга VII

Рокотов Алексей
7. Вечный
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Вечный. Книга VII

Кодекс Охотника. Книга ХХХ

Винокуров Юрий
30. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга ХХХ

Двойник Короля 5

Скабер Артемий
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Двойник Короля 5

Хозяин Стужи 3

Петров Максим Николаевич
3. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
Хозяин Стужи 3

На границе империй. Том 4

INDIGO
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00
рейтинг книги
На границе империй. Том 4