Алексей Валиков - Технология 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, процессор выполнит содержимое этого элемента.
Интервал:
Закладка: