The Planets
The first three planets are:
Each planet must have a name!
.
and
.
Чтобы проверить работу этого кода, я задал один из элементов пустым:
Mercury
.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
66.8
.
.
.
Вот как происходит обработка примера в Xalan:
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.
Листинг 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).
Листинг 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
Читать дальше