Таблица 7.1. Использование атрибута xsl:use-attribute-sets
Родительский элемент |
Особенности использования |
xsl:attribute-set |
Включает в определяемый набор атрибутов атрибуты из перечисленных наборов |
xsl:element |
Включает в создаваемый элемент атрибуты из перечисленных наборов. Включение эквивалентно текстовому включению — значения атрибутов вычисляются в контексте создающего элемента xsl:element |
xsl:copy |
Включает в копируемый элемент атрибуты из перечисленных наборов. Принцип действия— как в случае с xsl:element . Копируемый узел должен быть элементом |
Литеральный результирующий элемент |
Принцип действия такой же, как и в случае с xsl:element . В случае совпадения имен, значения атрибутов из набора будут переопределять значения атрибутов самого элемента. При использовании в литеральном элементе, атрибут xsl:use-attribute-sets должен быть обязательным образом объявлен принадлежащим пространству имен XSLT. Как правило, это делается указанием префикса xsl |
Шаблон преобразования может содержать текстовые узлы, которые при выполнении шаблона после обработки пробельных символов будут попросту скопированы в результирующее дерево. Таким образом, для того, чтобы вывести в выходящий документ некоторый текст, можно просто включить его в шаблон преобразования.
Рассмотрим пример.
Листинг 7.11. Входящий документ
No!
Листинг 7.12. Шаблон преобразования
The answer was "".
Листинг 7.13. Созданный текст
The answer was "No!".
Текстовые узлы могут также быть созданы элементами xsl:text
и xsl:value-of
. Элемент xsl:text
используется для создания текстовых узлов, содержащих пробельные и специальные символы, в то время как элемент xsl:value-of
выводит в выходящее дерево строковый результат вычисления выражений.
Синтаксис данного элемента представлен ниже:
disable-output-escaping="yes" | "no">
Элемент xsl:text
служит для того, чтобы создавать в выходящем документе текстовые узлы. При этом xsl:text
имеет следующие особенности.
□ Преобразования будут сохранять пробельные символы, находящиеся в элементе xsl:text
. То есть, для того чтобы вывести в выходящий документ пробельный символ, например такой, как символ перевода строки, достаточно написать
□ Элемент xsl:text
имеет атрибут disable-output-escaping
, который позволяет избежать замены в выходящем документе специальных символов на символьные или встроенные сущности. Например, для того, чтобы вывести символ " <
" можно указать в преобразовании
<
В остальных случаях символьные данные, включенные в элемент xsl:text
, ведут себя так же, как и вне xsl:text
.
Этот элемент является одним из наиболее часто используемых в XSLT. Он служит для вычисления значений выражений.
Синтаксическая конструкция элемента следующая:
select=" выражение "
disable-output-escaping="yes" | "no"/>
В обязательном атрибуте select
этого элемента задается выражение, которое вычисляется процессором, затем преобразовывается в строку и выводится в результирующем дереве в виде текстового узла. Процессор не станет создавать текстовый узел, если результатом вычисления выражения была пустая строка. В целях оптимизации дерева, соседствующие текстовые узлы будут объединены в один.
Элемент xsl:value-of
очень похож на элемент xsl:copy-of
, только в отличие от последнего он сначала преобразовывает вычисленное выражение к строковому виду, а уж затем выводит его в выходящий документ. Иными словами, выражение
равносильно
Соответственно, преобразование различных типов данных в строковый тип производится точно так же, как если бы мы использовали для этой цели функцию string
.
Пример
Для составления таблицы умножения можно воспользоваться следующим преобразованием.
Листинг 7.14. Входящий документ
1
2
3
4
5
6
7
8
9
Листинг 7.15. Преобразование, создающее таблицу умножения
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Листинг 7.16. Выходящий документ
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
Читать дальше