XML - статьи



              

/A> Обзор XPath - часть 2


Шаги в пути доступа вычисляются по очереди слева направо. Самый левый шаг вычисляется первым, обычно по отношению к контекстному узлу - корню дерева XML-документа. Каждый последующий шаг доступа выбирает набор узлов, который вычисляется по отношению к набору узлов, выбранному предыдущим шагом доступа. Набор узлов, выбранный самым правым шагом доступа - это результат всего пути доступа для данного XML-документа.

Пример пути доступа языка XPath приведен на рис. 2. Данный путь доступа состоит из 4 шагов доступа, во 2-м шаге доступа имеется один предикат, остальные шаги доступа предикатов не содержат. Если вернуться к рис. 1 и рассмотреть показанный на этом рисунке XML-документ "clients.xml", то нетрудно видеть, что путь доступа на рис. 2 для данного документа выбирает имя (name) человека (person), у которого имеется атрибут person-id со значением "per2". Специальный тест узла языка XPath text() используется в данном шаге доступа для адресации к текстовому узлу с целью получения имени.

Рис. 2: Пример пути доступа, который выбирает имя клиента, имеющего атрибут person-id со значением "per2".

Помимо рассмотренного синтаксиса для записи путей доступа (называемого также полным синтаксисом), Спецификацией XPath определяется также укороченный синтаксис (abbreviated syntax) для наиболее употребительных конструкций языка. При дальнейшем изложении мы будем пользоваться двумя такими правилами укороченного синтаксиса:

  • Ось child используется в шаге доступа по умолчанию, т.е. спецификатор

    child:: может опускаться.

  • Разделитель в две идущие подряд косые черты ("//'') символизируют шаг доступа /descendant-or-self::node()/, выбирающий контекстный узел и всех его узлов-потомков.
  • В виде сокращенного синтаксиса путь доступа, рассмотренный на рис. 2, может быть переписан так: //person[attribute::person-id = 'per2']/

       name/text()

    Мы будем пользоваться сокращенным синтаксисом для компактной записи рассматриваемых далее примеров.




    Содержание  Назад  Вперед