Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL errors.xsl -OUT new.xml
file:///C:/XSL/w.xsl: Line 18: Column 38: Each planet must have a name!
XSLT Error (javax.xml.transform.TransformerException): Stylesheet directed termination
Если вы знакомы с конструкцией if
в языках программирования, вы знаете, что инструкция if
обычно сопровождается инструкцией else
, которая выполняется при ложности условия в if
. Но в XSLT нет элемента . Для задания альтернативных ветвей выполнения XSLT служит элемент .
Элементы , и
Элемент похож на оператор Java switch
, который позволяет сравнивать значение условия с несколькими возможными вариантами.
У элемента нет атрибутов. Он содержит один или более элементов и (не обязательно) один элемент , который в случае применения должен стоять последним.
Вот как это работает: в элемент заключаются элементы , каждый с условием true/false
. Применяется тело шаблона в первом элементе , чье условие имеет значение true
, все остальные не применяются. Последним элементом внутри элемента может быть элемент тело шаблона внутри этого элемента применяется, если ни одно из предыдущих условий не имело значения true
:
В предыдущем разделе для осуществления этого преобразования нам потребовалось три элемента :
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets
The first three planets are:
Each planet must have a name!
,
.
Теперь то же самое можно сделать при помощи единственного элемента :
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets
The first three planets are:
Each planet must have a name!
.
.
.
Нам нужно проверить, в каком месте документа мы находимся, при помощи включения нескольких элементов . У этого элемента только один атрибут:
• test
(обязательный). Принимает логическое ( Boolean
) значение ( true/false
) проверяемого условия.
Элемент содержит тело шаблона.
Атрибут проверки принимает значение true/false выражения, определяющего, будет ли применяться заключенное в элементе тело шаблона или нет. Например, вот как я добавил элементы с соответствующими знаками пунктуации для всех планет, кроме последней:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets
The first three planets are:
Each planet must have a name!
,
and
.
.
.
Эти два элемента выбирают все элементы за исключением последнего, поэтому элемент можно применить для последнего элемента . Тело шаблона в этом элементе будет применено, если ни в одном элементе в элементе условие не примет значение true
.
У элемента нет атрибутов, и он содержит тело шаблона. Вот как это выглядит в листинге 5.4.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets
The first three planets are:
Each planet must have a name!
,
and
.
Вот как это работает; этот код дает тот же результат, что и код, проверяющий позицию элементов при помощи :
The Planets
The first three planets are: Mercury, Venus, and Earth.
Вот еще один пример преобразования XML-XML. В этом случае я преобразую planets.xml
в новый XML-документ, сохраняя только название каждой планеты и добавляя описание:
The Planets
Mercury
Hottest
Venus
Hot
Earth
OK
Это преобразование можно реализовать, выбирая значение каждого элемента , то есть заключенный в нем текст (заметьте, что такого рода строки в XSLT учитывают регистр) (листинг 5.5).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets
Each planet must have a name!
Hottest
Hot
OK
Вот и все.
Предположим теперь, что нам нужно добавить в каждый элемент атрибут COLOR
:
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4
Отобразить названия различных планет при помощи элемента , отформатированные по-разному при помощи тегов HTML <���В>
, и в зависимости от значения атрибута COLOR
, можно следующим образом (листинг 5.6).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Planets
<���В>
Вот результирующий документ:
Planets
Mercury
Venus
Earth
Как вы видели, при помощи можно проверять единственное условие, а при помощи — несколько; аналогичные конструкции присутствуют в большинстве языков программирования. Кроме подобных этим условных операторов, в большей части языков программирования существуют также операторы цикла, и в XSLT содержится нечто похожее — элемент .
Элемент
Элемент позволяет применять тело шаблона в цикле снова и снова для всех элементов набора узлов. С технической точки зрения, он работает с набором узлов, который возвращает выражение XPath и выполняет одно и то же действие с каждым узлом в наборе. При каждом шаге цикла тело шаблона применяется к следующему узлу из набора узлов, что дает возможность легко обрабатывать несколько узлов.
ПРОТИВ
Вы могли заметить, что это описание практически такое же, как и у элемента , и я сравню элементы и через несколько страниц.
У элемента один атрибут:
• select
(обязательный). Принимает значение выражения XPath, возвращающее набор узлов, который нужно обработать в цикле.
Элемент может содержать ноль или более элементов , за которыми следует тело шаблона. Работу с элементом мы изучим позже в этой главе.
В теле шаблона функция position
возвращает позицию текущего узла в наборе узлов, a last
возвращает число узлов в наборе. Если не используется, узлы обрабатываются в порядке документа (в порядке, в котором они перечислены в документе); если же используется элемент , набор узлов будет сначала отсортирован в порядке, заданном этим элементом.
Предположим, нам нужно отформатировать все названия планет, заключив их в элементы HTML <���Р>
, — это можно сделать следующим образом:
<���Р>
Но что делать, если у некоторых планет по два названия, как, например:
Mercury
Closest planet to the sun
.0553
58.65
1516
.983
43.4
Это проблема, поскольку атрибут select
элемента сам по себе выберет только первый элемент . Чтобы пройти в цикле все возможные варианты, вместо него следует применить элемент (листинг 5.7).
Интервал:
Закладка: