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

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

· оси (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>

Оси

Поиск в 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 – все узлы, имеющие тот же корневой элемент, что и контекстный узел, не являющиеся потомками контекстного узла и следующие по порядку перед контекстным узлом.








Дата добавления: 2015-03-19; просмотров: 779;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.