Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
logout _
В результате получится следующая инструкция:
Для того чтобы создать в выходящем XML-документе инструкцию xml-stylesheet
, которая используется для связывания документов со стилями и преобразованиями, можно воспользоваться следующим определением:
href="style.xsl" type="text/xsl"
Результирующий документ будет содержать инструкцию по обработке в виде:
Элемент xsl:processing-instruction
не может создать декларацию XML, несмотря на то, что с точки зрения синтаксиса (но не семантики) она имеет форму инструкции по обработке. Для вывода XML-декларации следует использовать элемент xsl:output
.
Копирование узлов
Преобразование может включать в себя не только создание новых, но и копирование существующих узлов. Для этого можно использовать элементы xsl:copy
и xsl:copy-of
, использование которых будет подробно разобрано ниже.
Элемент xsl:copy
Ниже представлена синтаксическая конструкция этого элемента:
use-attribute-sets = " наборы атрибутов ">
Элемент xsl:copy
создает копию текущего узла вне зависимости от его типа. Вместе с текущим узлом в выходящее дерево копируются только узлы пространств имен, ассоциированные с ним. Дочерние узлы и узлы атрибутов в выходящий документ не копируются.
Если xsl:copy
используется для копирования корневого узла или узда элемента, в выходящем документе процессор создает дочерний фрагмент дерева, являющийся результатом выполнения шаблона, содержащегося в xsl:copy
.
Предположим, что в каждый элемент преобразовываемого документа нам нужно добавить атрибут element-count
со значением, равным количеству его дочерних элементов, а все остальные узлы оставить, как есть.
<���а> text
text
text
text
Если xsl:copy
используется для создания в выходящем документе копии узла элемента, в него при помощи атрибута use-attribute-sets
могут быть также включены именованные наборы атрибутов ( см. раздел "Именованные наборы атрибутов" данной главы ).
Предыдущее преобразование может быть переписано в виде
Результат преобразования будет абсолютно идентичен выходящему документу, полученному в предыдущем примере.
Элемент xsl:copy-of
Синтаксис элемента несложен:
select=" выражение "/>
Использование элемента xsl:copy-of
полностью аналогично использованию элемента xsl:value
-of за тем исключением, что xsl:copy-of
при выводе значения выражения преобразует его к строке не во всех случаях. Поведение xsl:copy-of
зависит от того, какой тип данных возвращает выражение.
□ Если результат вычисления имеет булевый, числовой или строковый тип, то xsl:copy-of
выводит его в виде текстового узла. В этом случае поведение xsl:copy-of
абсолютно не отличается от поведения элемента xsl:value-of
.
□ Если результатом вычисления выражения является множество узлов (node-set), то xsl:copy-of
копирует в выходящий документ все узлы в порядке просмотра документа вместе с их потомками.
□ Если результатом вычисления является результирующий фрагмент дерева, то он копируется в выходящий документ в неизмененном виде.
Рассмотрим пример.
false
text
3.14
10
20
30
text
text
text
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Value-of boolean:
Copy-of boolean:
Value-of string:
Copy-of string:
Value-of number:
Copy-of number:
Value-of node-set:
Copy-of node-set:
Value-of tree:
Copy-of tree:
Value-of boolean:false
Copy-of boolean:false
Value-of string:text
Copy-of string:text
Value-of number:3.14
Copy-of number:3.14
Value-of node-set:10
Copy-of node-set:102030
Value-of tree:
text
text
Copy-of tree:
text
text
Условная обработка
В XSLT имеются две инструкции, которые поддерживают условную обработку — xsl:if
и xsl:choose
. Инструкция xsl:if
позволяет создавать простые условия типа "если-то", в то время как xsl:choose
создает более сложную конструкцию для выбора одной из нескольких имеющихся возможностей в зависимости от выполнения тех или иных условий.
Элемент xsl:if
Синтаксис элемента следующий:
test=" выражение ">
Элемент xsl:if
является простейшим условным оператором в XSLT. Выражение, содержащееся в обязательном атрибуте test
, вычисляется и приводится к булевому типу. В том и только том случае, если выражение имеет значение true
, процессор выполняет шаблон, содержащийся в xsl:if
.
Вследствие того, что атрибуты в XML не могут содержать некоторые специальные символы (такие как " <
" и " &
"), их необходимо заменять символьными сущностями. В особенности это касается сравнения чисел типа "меньше"; объявление вида
будет с точки зрения синтаксиса XML некорректным. Вместо него следует использовать эквивалентное объявление
Следует заметить, что символ "больше" (" >
") заменять сущностью необязательно. Однако из соображений единообразия принято заменять и его.
Предположим, мы преобразовываем список названий
Alpha
Bravo
Charlie
во фрагмент HTML-кода, в котором каждый элемент item
должен быть преобразован в соответствующий элемент option
, а значение, выбранное во входящем документе атрибутом active
элемента list
, должно быть помечено булевым атрибутом selected
.
selected
Результат:
Alpha Bravo CharlieВ данном преобразовании использовался метод вывода " html
". Подробнее о методах вывода выходящего документа см. раздел "Контроль вывода документа" 8 главы .
К сожалению, элемент xsl:if
в XSLT не может реализовать конструкцию if-then-else (англ. если-то-иначе). Условные выражения такого вида реализуются при помощи элементов xsl:choose
, xsl:when
и xsl:otherwise
.
Элементы xsl:choose, xsl:when, xsl:otherwise
Ниже даны синтаксические конструкции этих элементов:
test=" выражение ">
Элемент xsl:choose
содержит один или несколько элементов xsl:when
и необязательный элемент xsl:otherwise
. При обработке xsl:choose
процессор поочередно вычисляет выражения, содержащиеся в атрибутах test
элементов xsl:when
, приводит их к булевому типу и выполняет содержимое первого (и только первого) элемента, тестовое выражение которого будет равно true
. В случае если ни одно из тестовых выражений не обратилось в "истину" и в xsl:choose
присутствует xsl:otherwise
, процессор выполнит содержимое этого элемента.
Интервал:
Закладка: