Стивен Холзнер - 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">
.
.
.
Вот результаты; заметьте, что значения имени и массы заключены в элементы <���В>
:
The Planets Table
.
.
.
Mercury
.0553
1516 miles
58.65 days
Venus
.815
3716 miles
116.75 days
Earth
1
2107 miles
1 days
Операцию | можно применять к любым допустимым образцам — например, в таких выражениях, как " PLANET|PLANET//NAME
"; можно использовать несколько операций | — например, " NAME|MASS|DAY
" и т.п.
Примеры образцов
Изучать образцы лучше всего на примерах. Предположим, что нам требуется преобразовать planets.xml
в planets.html
, но сохранить только первую планету, Меркурий. Это можно сделать при помощи предиката [position()<2]
, так как позиция первой планеты равна 1, следующей — 2, и т.д. Заметьте, однако, что <; является управляющим символом для процессоров XSLT, начинающим разметку, поэтому вместо < необходимо использовать <
. И отметьте, что для того чтобы убрать из planets.xml
другие элементы, для них нужно предоставить пустой шаблон, что можно сделать при помощи предиката [position()>=2]
(листинг 4.10).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
Вот результирующий документ — отметьте, что сохранилась только первая планета, Меркурий:
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
Mercury | .0553 (Earth = 1) | 1516 miles | 58.65 days |
В следующем примере в элемент Земли были добавлены атрибуты COLOR
(цвет) и POPULATED
(населена):
Earth
1
1
2107
1
1284
Как выбрать только элементы, имеющие оба атрибута, COLOR
и POPULATED
? Можно применить предикат " [@COLOR and @POPULATED]
". Чтобы убрать другие элементы — так, чтобы правило по умолчанию не поместило их текст в результирующий документ, — можно применить предикат " [not(@COLOR) or not(@POPULATED)]
", как показано в листинге 4.11.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Colorful, Populated Planets
Colorful, Populated Planets
Name | Mass | Radius | Day |
А вот результат:
Colorful, Populated Planets
Colorful, Populated Planets
Name | Mass | Radius | Day |
Earth | 1 (Earth = 1) | 2107 miles | 1 days |
Этот документ показан на рис. 4.3.

Рис. 4.3.Применение предикатов XPath для проверки атрибутов
В следующем примере я копирую planets.xml
в новый XML-документ и изменяю текст в элементе Венеры на " The Planet of Love
" (планета любви). Для этого я сначала копирую в результирующий документ все узлы и атрибуты:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
Теперь я добавлю новое правило, выбирающее элементы с текстом " Venus
" (Венера) по образцу " NAME[text()='Venus']
". Хотя элементы удовлетворяют обоим правилам этой таблицы стилей, правило с образцом " NAME[text()='Venus']
" осуществляет более узкий выбор, поэтому для элемента Венеры процессор XSLT применит его:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planet of Love
И вот результат:
Mercury
.0553
58.65
1516
.983
43.4
The Planet of Love
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4
В действительности, в выражениях XPath можно ссылаться на контекстный узел при помощи ".", и значением по умолчанию для узла является его текст, поэтому следующее правило работает точно так же:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planet of Love
Имеет смысл привести как можно больше примеров — примеров XPath или образцов выбора никогда не бывает слишком много. Ниже приведен содержательный ряд примеров образцов выбора:
• PLANET
выбирает дочерние элементы контекстного узла;
• /PLANETS
выбирает корневой элемент документа;
• *
выбирает все дочерние элементы контекстного узла;
• PLANET[3]
выбирает третьего ребенка контекстного узла;
• PLANET[last()]
выбирает последнего ребенка контекстного узла;
• PLANET[NAME]
выбирает детей контекстного узла, имеющих детей ;
• PLANET[DISTANCE]/NAME
выбирает все элементы элементов , содержащих по крайней мере один элемент ;
• PLANET[DISTANCE]/PLANET[DAY]
выбирает все элементы элементов , в которых элемент содержит по крайней мере один элемент , и элемент содержит по крайней мере один элемент ;
• РLANETS[РLАNET/DAY]
выбирает все элементы , содержащие элементы как минимум с одним элементом ;
• PLANET[DISTANCE][NAME]
выбирает все элементы , имеющие элементы и ;
• PLANETS/PLANET[last()]
выбирает последний элемент в каждом элементе ;
• */PLANET
выбирает всех внуков контекстного узла;
• /PLANETS/PLANET[3]/NAME[2]
выбирает второй элемент третьего элемента элемента ;
• //PLANET
выбирает всех потомков корня документа;
• PLANETS//PLANЕТ
выбирает потомков элемента детей элемента контекстного узла;
• //PLANET/NAME
выбирает все элементы , дочерние по отношению к родителю ;
• РLАNETS//PLАNET/DISTАNСЕ//РЕRIНЕLION
выбирает элементы везде внутри элемента элемента , везде внутри элемента ;
• @UNITS
выбирает атрибут UNITS
контекстного узла;
• @*
выбирает все атрибуты контекстного узла;
• *[@UNITS]
выбирает все элементы с атрибутом UNITS
;
• DENSITY/@UNITS
выбирает атрибут UNITS
в элементах ;
• PLANET[not(@COLOR) or not(@SIZE)]
выбирает элементы , не имеющие обоих атрибутов COLOR
и SIZE
;
• PLANETS[@STAR="Sun"]//DENSITY
выбирает любой элемент с элементом-предком , имеющим атрибут STAR
со значением " Sun
";
• PLANET[NAME="Venus"]
выбирает детей контекстного узла, имеющих детей с текстом " Venus
";
• PLANET[NAME[1]="Venus"]
выбирает все элементы , у которых в первом элементе содержится текст в " Venus
";
• DAY[@UNITS!="million miles"]
выбирает все элементы , атрибут UNITS
которых не равен " million miles
";
• PLANET[@UNITS="days"]
выбирает всех детей контекстного узла, имеющих атрибут UNITS
со значением " days
";
• PLANET[6][@UNITS="days"]
выбирает шестого ребенка контекстного узла, только если у этого ребенка есть атрибут UNITS
со значением " days
", — что также можно записать как PLANET[@UNITS="days"][6]
;
Интервал:
Закладка: