Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лекции / Lect4-05.doc
Скачиваний:
6
Добавлен:
12.05.2015
Размер:
645.12 Кб
Скачать

5.1.1.5. Выражения пути в xPath

5.1.1.5.1. Синтаксис выражений пути

Одна из важнейших функций XPath– это выбор множеств узлов в доку­менте. Особый вид выраженийXPath, называемыйвыражениями пути(pathexpressions), позволя­ет выбирать в документе множество узлов в соответствии заданными критериями.

Выражение пути состоит из одного или более шагов, каждый из которых отделяется один от другого либо с помощью символа "/", либо с помощью символов "//". Выражение пути может также начинаться с символов "/"или "//". Результатом каждого шага поиска является последовательность узлов (возможно пустая).

Если выражение пути начинается с символа "/", то поиск начинается с корневого узла документа, а если с символов "//" – с контекстного узла документа, включая сам контекстный узел. Если символ "/" задан внутри выражения пути, то выполняется переход к следующему шагу поиска. Символы "//" внутри выражения пути означают, что следующий шаг поиска будет выполняться для потомков контекстного узла документа, включая сам контекстный узел.

В XPath2.0 определены два вида шагов поиска:

  • шаг с использованием оси поиска (axisstep);

  • шаг с использованием фильтра (filterstep).

5.1.1.5.2. Шаги с использованием оси поиска

Шаги с использованием оси поиска состоят из трех компонент:

  • оси (axis), указывающей дерево взаимоотношений между текущим узлом контекста и узлами, отбираемыми на данном шаге адресации;

  • правила проверки узлов, указывающего тип и расширенное название узлов, отбираемых на данном шаге адресации;

  • нуля или более предикатов, использующих произвольные выражения для дальнейшего отбора в наборе узлов, собранных на данном шаге адресации.

Шаг с использованием оси поиска имеет следующий синтаксис:

имя-оси::проверка-узла[предикат]

Последовательность узлов, полученных на каждом шаге адресации, – это множество узлов, полученных в результате обработки ранее собранного набора узлов с учетом оси, правила проверки узлов и последующего отсева полученного набора узлов каждым из представленных предикатов.

Пример документа XML:

Следующий документ XML (email.xml) содержит пять сообщений электронной почты:

<?xml version="1.0" encoding="Windows-1251"?>

<email-folder>

<message>

<!-- Сообщение 1 -->

<header>

<address>

<from value="ivanov@mail.com"/>

<to value="petrov@mail.com"/>

</address>

<subject>Поздравление</subject>

</header>

<body>Поздравляю с днем рождения!</body>

</message>

<message>

<!-- Сообщение 2 -->

<header>

<address>

<from value="ivanov@mail.com"/>

<to value="sidorov@mail.com"/>

</address>

<subject>Напоминание</subject>

</header>

<body>Встречаемся в 10.00.</body>

</message>

<message>

<!-- Сообщение 3 -->

<header>

<address>

<from value="sidorov@mail.com"/>

<to value="ivanov@mail.com"/>

</address>

<subject>Отказ</subject>

</header>

<body>Я не смогу в это время.</body>

</message>

<message>

<!-- Сообщение 4 -->

<header>

<address>

<from value="ivanov@mail.com"/>

<to value="sidorov@mail.com"/>

</address>

<subject>Вопрос</subject>

</header>

<body>Когда ты может подойти?</body>

</message>

<message>

<!-- Сообщение 5 -->

<header>

<address>

<from value="sidorov@mail.com"/>

<to value="ivanov@mail.com"/>

</address>

<subject>Ответ</subject>

</header>

<body>Я смогу подойти в 12.30.</body>

</message>

</email-folder>

5.1.1.5.2.1. Оси

Поиск в XML-документе начинается с контекстного узла в дереве XPathи выполняется относительно этого узла.

Ось определяет, какой узел относительно контекстного узла должен быть вклю­чен в процесс поиска. Ось также определяет порядок узлов в наборе узлов. Ось, вы­бирающая узлы, следующие за контекстным узлом в порядке расположения в до­кументе, называется прямой. Ось, выбирающая узлы, предшествующие контекст­ному узлу, называетсяобратной. Всего в спецификацииXPathопределено 13 осей. Графическое представление дерева узлов и оси для документаemail.xmlприведены на рис. 5.1.2.

Ось selfопределяет сам контекстный узел (эта ось не имеет направления).

В спецификации XPathопределены следующиепрямые оси:

  • ось self– сам контекстный узел;

  • ось child– все дочерние узлы контекстного узла следующих типов: узлы элементов, текстовых узлов, узлов комментариев и инструкций по обработке (узлы документов, атрибутов и пространств имен не могут быть дочерними узлами);

  • ось descendant – все потомки контекстного узла, т.е. все дочерние узлы, дочерние узлы дочерних узлов и так далее;

  • ось descendant-or-self – сам контекстный узел и все его потомки;

  • ось following-sibling– все узлы, имеющие тот же родительский элемент, что и контекстный узел, и следующие по порядку за контекстным узлом (если узел является узлом атрибута или узлом пространства имен, эта ось пуста);

  • ось following– все узлы, имеющие тот же корневой элемент, что и контекстный узел, не являющиеся потомками контекстного узла и следующие по порядку за контекстным узлом;

  • ось attribute– все узлы атрибутов контекстного узла (эта ось пуста если контекстный узел не является элементом);

  • ось namespace– все узлы пространства имен контекстного узла (эта ось пуста если контекстный узел не является элементом).

Рис. 5.1.2. Дерево XPath и оси для документа email.xml

В спецификации XPathопределены также следующиеобратные оси:

  • ось parent– родительский узел контекстного узла (если узел не имеет родительского узла, эта ось пуста);

  • ось ancestor – все предки контекстного узла, т.е. родительский узел, родительский узел родительского узла и так далее;

  • ось ancestor-or-self – сам контекстный узел и все его предки;

  • ось preceding-sibling– все узлы, имеющие тот же родительский элемент, что и контекстный узел, и следующие по порядку перед контекстным узлом (если узел является узлом атрибута или узлом пространства имен, эта ось пуста);

  • ось preceding– все узлы, имеющие тот же корневой элемент, что и контекстный узел, не являющиеся потомками контекстного узла и следующие по порядку перед контекстным узлом.

Соседние файлы в папке Лекции