<!-- Соответствует паттерну body//a -->

  </a>

  <p>

   <a>

    <!-- Соответствует паттерну body//a -->

   </a>

  </p>

 </body>

 <а>

  <!-- Не соответствует паттерну body//а -->

 </а>

</html>

Существует также и более простое определение соответствия. Узел X соответствует паттерну P тогда и только тогда, когда X принадлежит множеству //P. В приведенном выше примере паттерну body//а соответствуют все узлы множества //body//а.

Эти определения эквивалентны. На практике следует пользоваться тем, которое кажется более понятным.

Примеры паттернов

□ body — соответствует элементам body с нулевым пространством имен;

□ xhtml:body — соответствует элементам body, принадлежащим пространству имен с префиксом xhtml;

□ body/a — соответствует дочерним элементам а элемента body;

□ * — соответствует любому элементу, который принадлежит нулевому пространству имен;

□ а[1] — соответствует каждому первому элементу а своего родительского узла; элемент будет соответствовать этому паттерну, если ему не предшествует никакой братский элемент a — то есть из всех дочерних элементов а некоторого узла этому паттерну будет соответствовать только первый в порядке просмотра документа элемент;

□ a[position() mod 2 = 0] — соответствует каждому четному элементу a своего родительского узла; иначе говоря, из всех элементов а некоторого узла этому паттерну будут соответствовать только четные;

□ / — соответствует корневому узлу;

□ /html — узел будет соответствовать этому паттерну тогда и только тогда, когда он является элементом с именем html и нулевым пространством имен и находится при этом в корне элемента;

□ //html — соответствует любому элементу html документа, принадлежащему нулевому пространству имен; этот паттерн равносилен паттерну html;

□ *[starts-with(local-name(), 'A') or starts-with(local-name(), 'a')] — соответствует любому элементу, имя которого начинается на букву 'а' в любом регистре символов;

□ *[string-length(local-name())=2] — соответствует любому элементу, локальная часть имени которого состоит из двух символов;

□ *[starts-with(namespace-uri(),'http') or starts-with(namespace-uri(), 'HTTP')] — соответствует любому элементу, URI пространства имен которого начинается на 'http' или 'HTTP';

□ br[not(*)] — соответствует элементу br, который не имеет дочерних элементов;

□ id('i') — соответствует элементу, уникальный атрибут которого (атрибут, имеющий тип ID) равен 'i';

□ id('i')/@id — соответствует атрибуту id элемента, уникальный атрибут которого равен 'i'; заметим, что уникальный атрибут элемента вовсе не обязательно должен иметь имя id;

□ key('name', 'html')/@href — соответствует атрибуту href узла, значение ключа с именем 'name' которого равно 'html';

□ *|@* — соответствует любому элементу или атрибуту;

□ a|b|с — соответствует элементам а, b и с;

□ node() — соответствует любому узлу, кроме узла атрибута и пространства имен (поскольку они не являются дочерними узлами своих родителей);

□ node() | attribute::* | namespace::* — соответствует любому узлу, включая узлы атрибутов и пространств имен;

□ node()[not(self::text())] — соответствует любому узлу, кроме текстового узла, узла атрибута и узла пространства имен.

Выражения

Выражения XPath являются наиболее общими конструкциями этого языка. Пути выборки, разобранные ранее, — это всего лишь частный случай выражения. Выражения включают в себя арифметические и логические операции, вызов функций, операции с путями выборки и так далее.

Выражениям языка соответствует нетерминал Expr. И хотя синтаксическое правило, определяющее этот нетерминал, записывается очень просто, в данный момент оно нам абсолютно ничего не скажет.

Базовая конструкция, использующаяся в выражениях, называется первичным выражением (от англ. primary expression). Первичные выражения могут быть переменными, литералами, числами, вызовами функций, а также обычными выражениями Expr, сгруппированными в круглых скобках:

[XP15] PrimaryExpr ::= VariableReference

                       | '(' Expr ')'

                       | Literal

                       | Number

                       | FunctionCall

Переменные

Переменные вызываются в выражениях XPath по своему имени, которому предшествует символ '$'. Например, если мы объявили переменную nodes:

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату