Технология XSLT
Шрифт:
□ атрибут
match
элемента xsl:template
. Последние два случая паттернов отличаются от первого тем, что в них нельзя использовать переменные. Определение вида
<xsl:template match="*[name = $name]">
...
</xsl:template>
будет некорректным.
Семантика паттернов
Остановимся подробнее на вопросе — что же означает "соответствие узла некоторому паттерну".
Прежде
Узел
X
соответствует паттерну P
тогда и только тогда, когда существует такой узел Y
, принадлежащий оси ancestor-or-self
узла X
, что множество, получаемое в результате вычисления выражения P
в контексте узла Y
будет содержать узел X
. Пример
Рассмотрим это определение на примере паттерна
body//а
. Строго говоря, узел будет соответствовать этому паттерну, если во множестве его предков (плюс сам узел) найдется такой узел, что множество body//а
, вычисленное в его контексте, будет содержать проверяемый узел. На практике первые два элемента а
приведенного ниже документа соответствуют этому паттерну, потому что существует элемент html
, содержащий элемент body
, потомками которого эти элементы а
являются. Листинг 6.2
<html>
<body>
<a>
<!-- Соответствует паттерну body//a -->
</a>
<a>
<!-- Соответствует паттерну body//a -->
</a>
</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"
; □
*|@*
— соответствует любому элементу или атрибуту;
Поделиться:
Популярные книги
Бастард
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Последний наследник
11. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных арканов 2
2. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Босс для Несмеяны
11. Семеро боссов корпорации SEVEN
Любовные романы:
современные любовные романы
5.00
рейтинг книги
В погоне за женой, или Как укротить попаданку
Фантастика:
фэнтези
6.62
рейтинг книги
Купеческая дочь замуж не желает
Фантастика:
фэнтези
6.89
рейтинг книги
По дороге на Оюту
Фантастика:
космическая фантастика
8.67
рейтинг книги
Кодекс Охотника. Книга XVII
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард
1. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неправильный боец РККА Забабашкин 3
3. Неправильный солдат Забабашкин
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Попаданка для Дракона, или Жена любой ценой
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Прорвемся, опера! Книга 2
2. Опер
Фантастика:
попаданцы
альтернативная история
5.00