Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Very heavy!
А вот результирующий XML-документ:
Mercury
Very heavy!
58.65
1516
43.4
Earth
Very heavy!
1
2107
1
128.4
При задании осей в образцах можно воспользоваться рядом сокращений, применяемых практически повсеместно.
Сокращенный синтаксис
Для образцов существует два правила сокращения осей:
• child::childname
может быть сокращено как childname
;
• attribute::childname
может быть сокращено как @childname
.
В следующем списке перечислен ряд примеров образцов с сокращенным синтаксисом; в конце главы вы увидите много других.
• PLANET
. Выбирает дочерние элементы контекстного узла;
• *. Выбирает все дочерние элементы контекстного узла;
• @UNITS
. Выбирает атрибут UNITS
узла;
• @*
. Выбирает все атрибуты контекстного узла;
• */PLANET
. Выбирает всех внуков контекстного узла;
• //PLANET
. Выбирает всех потомков корня документа;
• PLANETS//PLANET
. Выбирает все элементы , являющиеся потомками дочерних элементов контекстного узла;
• //PLANET/NAME
. Выбирает все элементы , дочерние по отношению к ;
• PLANET[NAME]
. Выбирает детей контекстного узла, у которых есть дочерние элементы .
В таком образце, как " child::PLANET
", " child
" является осью, a " PLANET
" — условием узла, что представляет собой вторую часть образцов шага.
Образцы шага, часть 2: условия узла
Условия узла (node test) составляют вторую часть образцов шага. В качестве условий узла можно использовать названия узлов или символ подстановки *
для выбора и узлов, и их типов. Например, выражение child::*/child::NAME
выбирает все элементы , являющиеся правнуками контекстного узла.
Помимо названий узлов и символа подстановки, можно применять также следующие условия узлов:
• comment()
выбирает узлы комментария;
• node()
выбирает узел любого типа;
• processing-instruction()
выбирает узел инструкции обработки. В скобках можно указать название выбираемой инструкции обработки;
• text()
выбирает текстовый узел.
В следующих разделах мы изучим эти условия узлов и рассмотрим примеры их применения.
Выбор комментариев
Текст комментариев можно выбрать при помощи образца comment()
. Разумеется, не следует хранить данные, которые попадут в выходной документ, в комментариях входного документа. Тем не менее, вам может потребоваться преобразовать комментарии из формы в какую-то другую форму, используемую другим языком разметки, — например, элемент .
В следующем примере я извлеку комментарии из planet.xml
и включу их в полученные выходные данные.
Venus
"(Earth = 1)">.815
116.75
3716
.943
66.8
Чтобы извлечь комментарии и поместить их в элементы , я включил правило только для комментариев (листинг 4.3).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Вот результат для Венеры, в котором комментарий преобразован в элемент :
Venus
.815
116.75
3716
.943
66.8B перигелии</СОММЕNT>
Обратите внимание: здесь текст для других элементов в элементе также включается в выходной документ, потому что так установлено в соответствии с правилом по умолчанию для каждого элемента. Поскольку для элементов я не предоставил какого-либо правила, их текст просто включается в выходной документ.
Выбор узлов при помощи node()
В образце условие узла node
выбирает любой узел, за исключением корневого узла — помните, что в действительности это child::node()
. Предположим, мы хотим создать таблицу стилей, копирующую произвольный документ XML, используя . (В главе 3 для этого применялся элемент .) Можно начать так, как показано в следующем примере. В этом случае в применяемом шаблоне для выбора любого элемента или любого атрибута используется операция OR, с которой мы познакомимся позже в этой главе (этот шаблон фактически выбирает себя — для того чтобы продолжать копирование на много уровней вглубь):
xmlns:xsl=http://www.w3.org/1999/XSL/Transform">
Однако посмотрите на результат — обратите внимание на то, что в этой версии, выбирающей только элементы и атрибуты ( @*|*
), не копируются узлы-разделители и текстовые узлы:
Это, конечно, неполно. Если я, с другой стороны, буду выбирать по образцу " @*|node()
" вместо " @*|*
", новое правило шаблона выберет все узлы за исключением корневого узла (который создается в результирующем дереве автоматически), поэтому символы-разделители будут скопированы, так же как и текст (листинг 4.4).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Новый результат:
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
Venus
.815
116.75
3716
.943
66.8
Earth
1
2107
1
128.4
Следующее выражение выбирает элементы с атрибутом COLOR
:
.
.
.
А что, если нам требуется выбрать планеты, у которых атрибут COLOR
имеет значение " BLUE
" (голубой)? Это можно сделать при помощи операции =, как показано в листинге 4.5.
<"xml version="1.0"?>
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The is blue.
Таблица стилей из листинга 4.5 отбирает планеты с голубым цветом и убирает остальные, выключая правило по умолчанию для текстовых узлов. Результат следующий:
The Earth is blue.
Создание предикатов
Предикаты — настоящие выражения XPath, и XPath гораздо ближе к настоящему языку, чем образцы: к примеру, выражения XPath могут возвращать не только списки узлов, но также логические, строковые и числовые значения. Выражения XPath могут работать не только с текущим узлом или дочерними узлами: можно работать с родительскими узлами, узлами-предками и другими узлами.
Глава 7 полностью посвящена XPath, но имеет смысл предоставить введение в предмет здесь, при обсуждении образцов, потому что часть предиката образца обладает наибольшими возможностями. В предикатах могут быть все виды выражений; в следующем списке перечислен ряд возможных типов, которые будут изучены в следующих разделах:
• наборы узлов;
• логические выражения;
• числа;
• строки.
Предикаты: наборы узлов
Интервал:
Закладка: