Проверка узла
Оси выбирают набор узлов из дерева документа. Этот набор узлов уточняется с помощью проверки узлов (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;