Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Шаблон преобразования может содержать текстовые узлы, которые при выполнении шаблона после обработки пробельных символов будут попросту скопированы в результирующее дерево. Таким образом, для того, чтобы вывести в выходящий документ некоторый текст, можно просто включить его в шаблон преобразования.
Рассмотрим пример.
No!
The answer was "".
The answer was "No!".
Текстовые узлы могут также быть созданы элементами xsl:text
и xsl:value-of
. Элемент xsl:text
используется для создания текстовых узлов, содержащих пробельные и специальные символы, в то время как элемент xsl:value-of
выводит в выходящее дерево строковый результат вычисления выражений.
Элемент xsl:text
Синтаксис данного элемента представлен ниже:
disable-output-escaping="yes" | "no">
Элемент xsl:text
служит для того, чтобы создавать в выходящем документе текстовые узлы. При этом xsl:text
имеет следующие особенности.
□ Преобразования будут сохранять пробельные символы, находящиеся в элементе xsl:text
. То есть, для того чтобы вывести в выходящий документ пробельный символ, например такой, как символ перевода строки, достаточно написать
□ Элемент xsl:text
имеет атрибут disable-output-escaping
, который позволяет избежать замены в выходящем документе специальных символов на символьные или встроенные сущности. Например, для того, чтобы вывести символ " <
" можно указать в преобразовании
<
В остальных случаях символьные данные, включенные в элемент xsl:text
, ведут себя так же, как и вне xsl:text
.
Элемент xsl:value-of
Этот элемент является одним из наиболее часто используемых в XSLT. Он служит для вычисления значений выражений.
Синтаксическая конструкция элемента следующая:
select=" выражение "
disable-output-escaping="yes" | "no"/>
В обязательном атрибуте select
этого элемента задается выражение, которое вычисляется процессором, затем преобразовывается в строку и выводится в результирующем дереве в виде текстового узла. Процессор не станет создавать текстовый узел, если результатом вычисления выражения была пустая строка. В целях оптимизации дерева, соседствующие текстовые узлы будут объединены в один.
Элемент xsl:value-of
очень похож на элемент xsl:copy-of
, только в отличие от последнего он сначала преобразовывает вычисленное выражение к строковому виду, а уж затем выводит его в выходящий документ. Иными словами, выражение
равносильно
Соответственно, преобразование различных типов данных в строковый тип производится точно так же, как если бы мы использовали для этой цели функцию string
.
Для составления таблицы умножения можно воспользоваться следующим преобразованием.
1
2
3
4
5
6
7
8
9
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
В данном случае элемент xsl:value-of
используется для вычисления произведения переменных a
и b
. Численный результат преобразуется в строку и выводится в выходящий документ в виде текста.
Равно, как и xsl:text
, элемент xsl:value-of
может иметь атрибут disable-output-escaping
, полезный для вывода специальных символов, которые в противном случае были бы заменены сущностями.
Результатом выполнения элемента
будет текстовый узел
Divide & impera
Чтобы придать амперсанту более привычный вид, мы можем использовать атрибут disable-output-escaping
:
select="concat('Divide ', '&', ' impera')"
disable-output-escaping="yes"/>
Результатом выполнения этого шаблона уже будет текст:
Divide & impera
Создание узлов комментариев и инструкций по обработке
Элемент xsl:comment
Этот элемент задается конструкцией вида:
Элемент xsl:comment
создает в результирующем дереве узел комментария. Текстом комментария становится результат выполнения шаблона, который содержится в элементе xsl:comment
.
Точно так же как и в случае с xsl:processing-instruction
, результат выполнения шаблона должен содержать только текстовые узлы. Узлы других типов будут либо проигнорированы, либо вызовут ошибку.
В соответствии с синтаксисом XML, комментарий в XML не может содержать двух знаков " -
" последовательно (" --
") и оканчиваться на " -
". Поэтому наличие таких последовательностей символов в тексте комментария будет являться в XSLT ошибкой. Для того чтобы избежать некорректного синтаксиса, процессор может разделять два последовательных минуса пробелом (заменять " --
" на " - -
") или добавлять пробел после завершающего минуса комментария.
Элемент:
| Please remove this later +
создаст комментарий:
Элемент xsl:processing-instruction
Синтаксис элемента представлен ниже:
name="{ имя }">
Элемент xsl:processing-instruction
создает в результирующем дереве узел инструкции по обработке. Обязательный атрибут name определяет имя целевого приложения, которому будет адресована инструкция по обработке. В этом атрибуте может быть указан шаблон значения атрибута.
Элемент:
links="follow" session-timeout="7200000"
создаст в выходящем документе инструкцию по обработке вида:
Содержимым создаваемой инструкции по обработке является результат выполнения шаблона, содержащегося внутри элемента xsl:processing- instruction
. Этот результат должен содержать только текстовые узлы, в противном случае процессор может либо выдать ошибку, либо проигнорировать нетекстовые узлы вместе с их содержимым.
Инструкция по обработке не может содержать последовательности символов " ?>
", поскольку это было бы некорректно с точки зрения синтаксиса XML.
В случае, если результат выполнения шаблона содержит такую комбинацию, процессор может либо выдать ошибку, либо разделить символы " ?
" и " >
" пробелом:" ? >
".
Имя инструкции по обработке, должно быть корректным XML-именем (но не равным при этом " xml
" в любом регистре символов). Например, следующее определение будет совершенно корректным:
Интервал:
Закладка: