Проверка узла

Оси выбирают набор узлов из дерева документа. Этот набор узлов уточняется с помощью проверки узлов (node test). В спецификации XPath определены два типа проверки узлов:

· проверка узлов по имени (name test);

· проверка узлов по виду (kind test).

При проверке узлов по имени в качестве критерия поиска задается уточненное имя узла (литерал типа QName), т.е. префикс – имя или имена пространств имен, и локальное имя. Имена пространства имен и локальное имя отделяются друг от друга символами ":". Если имя определено в пространстве имен по умолчанию, то префикс отсутствует.

Если вместо префикса указан символ "*", выбирается узел с заданным локальным именем во всех пространствах имен. Если же символ "*" указан вместо имени узла, выбираются все узлы в заданном пространстве имен.

Если вместо уточненного имени узла задан символ "*", то выбор выполняется для контекстного узла.

Если в результате проверки несколько раз встречается один и тот же узел, то в результирующем наборе узлов остается только один экземпляр этого узла.

 

Примеры задания выражений проверки узлов по имени:

Для документа email.xml можно задать следующие правила проверки:

1. self::header – выбираются все узлы header.

2. child::header – выбираются все дочерние узлы (address и subject) всех узлов header.

3. parent::header – выбираются все родительские узлы message узлов header.

4. ancestor::header – выбираются все узлы message и корневой узел email-folder узлов header.

5. ancestor-or-self::header – выбираются все узлы message, корневой узел email-folder и сами узлы header.

6. descendant::* – выбираются все потомки контекстного узла.

7. attribute::from – выбираются все атрибуты всех узлов from.

8. attribute::* – выбираются все атрибуты контекстного узла.

 

Проверка по виду узла реализуется с помощью следующих функций:

· element(имя-элемента) – выбирает все узлы-элементы с заданным именем-элемента (если в качестве аргумента задан символ "*", выбираются все узлы-элементы);

· element(имя-элемента, тип-элемента) – выбирает все узлы-элементы с заданным именем-элемента и заданным типом-элемента в схеме документа (тип узла определяется либо значением атрибута type в объявлении элемента, либо имени простого или комплексного типа элемента). Если в качестве имени-элемента задан символ "*", выбираются все узлы-элементы, если же в качестве типа-элемента задан символ "*", выбираются узлы-элементы всех типов;

· schema-element(имя-элемента) – выбирает все узлы-элементы с заданным в схеме документа объявлением элемента с заданным именем типа QName;

· node() – выбирает все узлы без учета их типа;

· text() – выбирает все текстовые узлы;

· comment() – выбирает все узлы-комментарии;

· processing-instruction(имя-программы) – выбирает все инструкции по обработке с заданным именем-программы обработки (если аргумент не задан, выделяются все инструкции по обработке);

· attribute(имя-атрибута) – выбирает все узлы-атрибуты с заданным именем (если в качестве аргумента задан символы "*" или аргумент не задан, выделяются все узлы-атрибуты);

· attribute(имя-атрибута, тип-атрибута) – выбирает все узлы-атрибуты с заданным именем и заданным типом в схеме документа (тип узла определяется либо значением атрибута type в объявлении атрибута, либо имени простого или комплексного типа атрибута). Если в качестве имени-атрибута задан символ "*", выделяются все узлы-атрибуты, если же в качестве типа-атрибута задан символ "*", выделяются узлы-атрибуты всех типов;

· schema-attribute(имя-атрибута) – выбирает все узлы-атрибуты с заданным в схеме документа объявлением атрибутом с заданным именем типа QName;

· document-node(аргумент) – выбирает все корневые узлы документа, содержимое которых состоит в точности из одного вложенного элемента.
В качестве аргумента задается либо одна из приведенных выше функций element(), либо функция schema-element().

 

Примеры задания выражений проверки узлов по виду:

Для документа email.xml можно задать следующие правила проверки:

1. descendant::text() – выделяет все текстовые элементы потомков контекстного узла.

2. child::element(subject) – выбирает все дочерние элементы с именем subject для контекстного узла.

3. child::element() – выбирает все дочерние элементы контекстного узла (без текстовых узлов и узлов-атрибутов).

4. child::element(*, xs:string) – выбирает все дочерние элементы контекстного узла, содержимое которых является текстовым.

5. attribute::attribute(value) – выбирает все атрибуты контекстного узла.








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


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

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

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

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