Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Шаги расположения, строительные блоки путей расположения, во многом похожи на образцы шага (step patterns), формирующие образцы выбора, которые мы видели в главе 4. В частности, шаг расположения образован из оси (axis), условия узла (node test) и предикатов (которых может и не быть) по такому образцу: axis::nodetest[predicate]
. Например, в выражении ancestor::NAME[position() > 100]
, ancestor
— это имя оси, NAME
— условие узла и [position() >100]
— предикат. (Предикат сам содержит законченное выражение XPath, обычно возвращающее логическое значение.) Пути расположения создаются при помощи одного или более шагов расположения, таких как /descendant::PLANET/child::NAME
, который выбирает все элементы с родителем .
Шаги XPath похожи на образцы шага из главы 4, так как общий их вид одинаков — axis::nodetest[predicate]
— но в данном случае нужно рассмотреть значительно больше материала. Например, осей теперь тринадцать, а не две.
Шаги расположения XPath, часть 1: оси
В пути расположения ancestor::NAME
, адресующем элемент , который является предком контекстного узла, ancestor
выступает осью. XPath поддерживает много различных осей, ниже приведен полный список:
• ось ancestor
содержит предков (ancestor) контекстного узла, то есть родителей контекстного узла, родителей этих родителей и т.д., вплоть до корневого узла (включая его);
• ось ancestor-or-self
содержит контекстный узел и его предков;
• ось attribute
содержит атрибуты контекстного узла;
• ось child
содержит детей контекстного узла;
• ось descendant
содержит потомков (descendant) контекстного узла, то есть его детей, детей этих детей и т.д.;
• ось descendant-or-self
содержит контекстный узел и его потомков;
• ось following
содержит все узлы в том же документе, такие же, как контекстный узел, встретившиеся после контекстного узла;
• ось following-sibling
содержит всех последующих братьев контекстного узла. «Брат» — узел, расположенный на том же уровне, что и контекстный узел;
• ось namespace
содержит узлы пространств имен контекстного узла;
• ось parent
содержит родителя контекстного узла;
• ось preceding
содержит все узлы до контекстного узла;
• ось preceding-sibling
содержит всех предшествующих «братьев» контекстного узла;
• ось self
содержит контекстный узел.
В следующем примере шаблона я воспользовался осью descendant
для выбора потомков контекстного узла, куда входят дочерние узлы, узлы-внуки, узлы-правнуки и т.д.:
В этой главе мы рассмотрим все перечисленные оси. В данном примере осью является descendant
, а имена элементов NAME
, MASS
и DAY
— это условия узлов.
Шаги расположения XPath, часть 2: условия узлов
При создании образцов в качестве условий узлов (node test) можно использовать имена узлов или символ подстановки * для выбора любого узла элемента. Например, выражение child::*/child::NAME
выбирает все элементы , являющиеся правнуками контекстного узла. В XPath кроме имен и символа подстановки можно также применять, как и в образцах выбора, следующие условия узлов:
• условие узла comment()
выбирает узлы комментария;
• условие узла node()
выбирает узел любого типа;
• условие узла processing-instruction()
выбирает узел инструкции обработки. В скобках можно указать название выбираемой инструкции обработки;
• условие узла text()
выбирает текстовый узел
Например, в листинге 7.2 таблица стилей находит в документе все комментарии при помощи условия узла comment()
и создает для каждого комментария новый, (Внимание! Найден комментарий!).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Warning: comment found!
При применении этой таблицы стилей к planets.xml
получается следующий документ:
Шаги расположения XPath, часть 3: предикаты
Предикат в шаге расположения XPath сам содержит заключенное в скобки выражение XPath, которое вычисляется в истину или ложь. Когда результатом вычисления выражения является строка, XPath считает ее истиной, если строка не пуста. Когда результат — набор узлов, XPath считает его истиной, если он не пуст. Когда результат — число, то общий результат будет считаться истиной, если это число совпадает с контекстной позицией — например, PLANET[3]
будет истиной тогда и только тогда, когда истиной будет PLANET[position()=3]
.
Предикаты содержат выражения XPath наподобие тех, которые встречались нам на протяжении этой главы: редко когда выражение возвращает набор узлов, главным образом возвращаются строки, числа или логические значения. Например, путь расположения preceding-sibling::MASS[position()*4]
выбирает четыре предыдущих элемента-брата для контекстного узла.
Применение осей XPath
К этому моменту мы рассмотрели три части шагов расположения — ось, условие узла и предикат. Вы должны быть знакомы с этими элементами по проделанной нами работе с образцами выбора, но обратите внимание на ось в предыдущем примере — preceding-sibling
. До сих пор мы видели только оси, выбиравшие образцы XSLT — оси child
и attribute
; теперь же мы рассмотрим новые оси, возможные в полных выражениях XPath, и начнем с оси ancestor
.
Применение оси ancestor
Ось ancestor
(предок) содержит всех предков контекстного узла, включая родителей, дедушек, прадедушек и т.д. Эта ось всегда содержит корневой узел — если только контекстным узлом не является сам корневой узел.
Взгляните на листинг 7.3, в котором при помощи оси ancestor
осуществляется поиск имен (хранимых в элементе ) всех предков элементов .
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Вот результат применения этой таблицы стилей к planets.xml
:
Mercury
Venus
Earth
Применение оси ancestor-or-self
Ось ancestor-or-self
содержит всех предков контекстного узла, а также сам контекстный узел. Это означает, помимо прочего, что такая ось всегда содержит корневой узел.
В листинге 7.4 добавлены атрибуты AUTHOR
со значением «Steve» в весь документ.
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4
Предположим теперь, что я хочу перечислить по имени всех предков элементов , имеющих атрибут AUTHOR
, а также текущий элемент , если у него есть атрибут AUTHOR
. Это можно сделать при помощи оси ancestor-or-self
и функции local-name
(листинг 7.5).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Интервал:
Закладка: