РНР 5 в подлиннике

Страница 438 из 554


Гпава 40. Пути-дорожки: язык XPath

885

@param domNode $node — отображаемый элемент

* @return array - масс

*/

function textopenclose($node) ( Switch ($node->nodeType) { case XML COMMENT NODE:

- массив открывающих и закрывающих кодов

// тип узла // Comment

$ореп = '<!--'; $close = '—>'; break;

case XML_CDATA_SECTION_NODE: // CDATASection $open = '<![CDATA [1; $close = ']]>'; break;

case XML_TEXT_NODE: // Text

$open = 1' ; $close = '';

}

- return Array($open, $close) ;

>

После описания программы вернемся к обсуждению результатов ее работы.

Как мы уже выяснили в предыдущих разделах, язык XPath имеет два способа адресации: относительную и абсолютную. Форматы адресов следующие:

П относительный адрес: шаг/шаг/...;

□ абсолютный адрес: /Шаг/Шаг/____•

Эта система очень похожа на систему адресации файлов в ОС Unix. Но в отличие от нее, язык XPath имеет более богатый синтаксис каждого шага:

Шаг: : = Ось: :Шаблон_узма [Предикат]

Каждый шаг может состоять из трех частей.

□ ось (Axis) задает направление, в котором выбираются узлы. Всего XPath поддерживает тринадцать направлений, из них семь являются основными (self, parent,

following-sibling, preceding-sibling, child, attributes, namespace), остальные —

производные. В рассмотренном примере использовались две оси — child и

parent.

П шабмон_узма (NodeTest) задает шаблон выбора узла либо по его типу (Text,

Comment, Processing Instruction И Т. П.), либо ПО Имени тега Элемента.

 предикат (Predicate) задает дополнительные условия по выбору узла — номеру узла, числа его потомков, перечня потомков, длине имени, наличию параметров

Название оси отделяется от шаблона узла двумя символами двоеточия (::). Предикат заключается в квадратные скобки ([]). В зависимости от типа запроса и используемой оси шаблон узла или предикат могут отсутствовать.

Структура запроса XPath

и т. п.

886

Часть VI. XML в РНР 5

Шаблон узла может принимать следующие значения: П node () — указывает на все узлы, заданные в оси;

□ texto — указывает на текстовые узлы;

□ comment () — указывает на узлы комментариев;

□ processing-instruction;) — указывает на узлы приложений;

□ * — в зависимости от типа оси указывает либо на все элементы, либо на все узлы

атрибутов (ОСЬ attibutes);

□ имя — в зависимости от типа оси указывает либо на элементы, либо на узлы атрибутов с заданным именем.

Оси

Рассмотрим типы осей, поддерживаемых языком XPath, и принятые их сокращения (табл. 40.1).

Таблица 40.1. Названия осей и их сокращения

Название оси

Описание

Сокращение

self::

Текущий (контекстный) узел

self::node() — символ "."

attribute: :

Узлы атрибутов

Attribute: : — символ @

namespace: :

Узлы описания области имен xmlns:...

child: :

Дочерние узлы

Можно не указывать

parent::

Родительский узел

Parent: : node () — набор символов

following-siblings: :

Последующие узлы общего родителя

preceding-siblings: :

Предыдущие узлы общего родителя

descendant::

Потомки данного узла (дочерние узлы, дочерние узлы дочерних узлов и т. д.)

descendant-or-self::

Потомки узла, включая текущий

/descendant-or-self::node()/— набор символов //

ancestor::

Предки узла (родительский, родитель родителя и вплоть до корневого узла)

ancestor-of-self: :

Предки узла, включая текущий

following: :

Все узлы документа после текущего

preceding: :

Все узлы документа до текущего




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006