Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лекции / Lect4-05.doc
Скачиваний:
6
Добавлен:
12.05.2015
Размер:
645.12 Кб
Скачать

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

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

  • проверка узлов по имени (nametest);

  • проверка узлов по виду(kindtest).

При проверке узлов по именив качестве критерия поиска задается уточненное имя узла (литерал типа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)– выбирает все атрибуты контекстного узла.

Соседние файлы в папке Лекции