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

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

Жанры

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

Шрифт:

• Узлы комментариев. Текст комментариев, не включая

<!--
и
– ->
;

• Узлы пространств имен. Объявление пространства имен. В XPath узел пространства имен добавляется во все элементы для каждого активного пространства имен, включая пространства имен по умолчанию;

• Узлы инструкций обработки. Содержат текст инструкции обработки, не включая

<?
и
?>
;

• Текстовые узлы. Текст PCDATA. Текстовые узлы по умолчанию в XPath нормализованы, поэтому расположенные рядом текстовые узлы немедленно

объединяются.

Для задания узла или набора узлов в XPath служит путь расположения (location path). Путь расположения, в свою очередь, состоит из одного или более шагов расположения (location step), также называемых просто шагами, разделенных / или //. Если путь расположения начинается с /, он называется абсолютным путем расположения, поскольку путь задается от корневого узла; иначе путь называется относительным, начинаясь от контекстного узла.

Шаги расположения, строительные блоки путей расположения, во многом похожи на образцы шага (step patterns), формирующие образцы выбора, которые мы видели в главе 4. В частности, шаг расположения образован из оси (axis), условия узла (node test) и предикатов (которых может и не быть) по такому образцу:

axis::nodetest[predicate]
. Например, в выражении
ancestor::NAME[position > 100]
,
ancestor
— это имя оси,
NAME
— условие узла и
[position >100]
— предикат. (Предикат сам содержит законченное выражение XPath, обычно возвращающее логическое значение.) Пути расположения создаются при помощи одного или более шагов расположения, таких как
/descendant::PLANET/child::NAME
, который выбирает все элементы
<NAME>
с родителем
<PLANET>
.

Шаги XPath похожи на образцы шага из главы 4, так как общий их вид одинаков —

axis::nodetest[predicate]
— но в данном случае нужно рассмотреть значительно больше материала. Например, осей теперь тринадцать, а не две.

Шаги расположения XPath, часть 1: оси

В пути расположения

ancestor::NAME
, адресующем элемент
<NAME>
, который является предком контекстного узла,
ancestor
выступает осью. XPath поддерживает много различных осей, ниже приведен полный список:

• ось

ancestor
содержит предков (ancestor) контекстного узла, то есть родителей контекстного узла, родителей этих родителей и т.д., вплоть до корневого узла (включая его);

• ось

ancestor-or-self
содержит контекстный узел и его предков;

• ось

attribute
содержит атрибуты контекстного узла;

• ось

child
содержит детей контекстного узла;

• ось

descendant
содержит потомков (descendant) контекстного узла, то есть его детей, детей этих детей и т.д.;

• ось

descendant-or-self
содержит контекстный узел и его потомков;

• ось

following
содержит все узлы в том же документе, такие же, как контекстный узел, встретившиеся после контекстного узла;

• ось

following-sibling
содержит всех последующих братьев контекстного узла. «Брат» — узел, расположенный на том же уровне, что и контекстный узел;

• ось

namespace
содержит узлы пространств имен контекстного узла;

• ось

parent
содержит родителя контекстного узла;

• ось

preceding
содержит все узлы до контекстного узла;

• ось

preceding-sibling
содержит всех предшествующих «братьев» контекстного узла;

• ось

self
содержит контекстный узел.

В следующем примере шаблона я воспользовался осью

descendant
для выбора потомков контекстного узла, куда входят дочерние узлы, узлы-внуки, узлы-правнуки и т.д.:

<xsl:template match="PLANET">

 <DATA>

<NAME>

<xsl:value-of select="descendant::NAME"/>

</NAME>

<MASS>

<xsl:value-of select="descendant::MASS"/>

</MASS>

<DAY>

<xsl:value-of select="descendant::DAY"/>

</DAY>

 </DATA>

</xsl:template>

В этой главе мы рассмотрим все перечисленные оси. В данном примере осью является

descendant
, а имена элементов
NAME
,
MASS
и
DAY
— это условия узлов.

Шаги расположения XPath, часть 2: условия узлов

При создании образцов в качестве условий узлов (node test) можно использовать имена узлов или символ подстановки * для выбора любого узла элемента. Например, выражение

child::*/child::NAME
выбирает все элементы
<NAME>
, являющиеся правнуками контекстного узла. В XPath кроме имен и символа подстановки можно также применять, как и в образцах выбора, следующие условия узлов:

• условие узла

comment
выбирает узлы комментария;

• условие узла

node
выбирает узел любого типа;

• условие узла

processing-instruction
выбирает узел инструкции обработки. В скобках можно указать название выбираемой инструкции обработки;

• условие узла

text
выбирает текстовый узел

Например, в листинге 7.2 таблица стилей находит в документе все комментарии при помощи условия узла

comment
и создает для каждого комментария новый,
<!--Warning:comment found!-->
(Внимание! Найден комментарий!).

Листинг 7.2. Выбор комментариев

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="xml"/>

 <xsl:template match="/">

<xsl:for-each select="descendant::comment">

<xsl:comment>Warning: comment found!</xsl:comment>

</xsl:for-each>

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

Хранилище

Старухин Евгений
5. Лесовик
Фантастика:
фэнтези
рпг
7.43
рейтинг книги
Хранилище

Морской волк. 1-я Трилогия

Савин Владислав
1. Морской волк
Фантастика:
альтернативная история
8.71
рейтинг книги
Морской волк. 1-я Трилогия

Искатель 1

Шиленко Сергей
1. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 1

Анти-Ксенонская Инициатива

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

На границе империй. Том 10. Часть 8

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 8

Мастер решений

Земляной Андрей Борисович
3. Специалист по выживанию
Фантастика:
боевая фантастика
космическая фантастика
6.20
рейтинг книги
Мастер решений

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

Последний реанорец. Том IX

Павлов Вел
8. Высшая Речь
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Последний реанорец. Том IX

Я до сих пор князь. Книга XXII

Дрейк Сириус
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII

Источник

Билик Дмитрий Александрович
11. Бедовый
Фантастика:
юмористическое фэнтези
городское фэнтези
мистика
7.00
рейтинг книги
Источник

Неучтенный элемент. Том 10

NikL
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 10

Последний Паладин. Том 13

Саваровский Роман
13. Путь Паладина
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 13

Дитя прибоя

Трофимов Ерофей
Дитя прибоя
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Дитя прибоя