Стивен Холзнер - 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).
Интервал:
Закладка: