Шаги с использованием оси поиска
Шаги с использованием оси поиска состоят из трех компонент:
· оси (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;