8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
В данном случае элемент xsclass="underline" value-of используется для вычисления произведения переменных a и b. Численный результат преобразуется в строку и выводится в выходящий документ в виде текста.
Равно, как и xsclass="underline" text, элемент xsclass="underline" value-of может иметь атрибут disable-output-escaping, полезный для вывода специальных символов, которые в противном случае были бы заменены сущностями.
Результатом выполнения элемента
<xsclass="underline" value-of select="concat('Divide ', '&', ' impera')"/>
будет текстовый узел
Divide & impera
Чтобы придать амперсанту более привычный вид, мы можем использовать атрибут disable-output-escaping:
<xsclass="underline" value-of
select="concat('Divide ', '&', ' impera')"
disable-output-escaping="yes"/>
Результатом выполнения этого шаблона уже будет текст:
Divide & impera
Создание узлов комментариев и инструкций по обработке
Элемент xsclass="underline" comment
Этот элемент задается конструкцией вида:
<xsclass="underline" comment>
<!-- Содержимое: шаблон -->
</xsclass="underline" comment>
Элемент xsclass="underline" comment создает в результирующем дереве узел комментария. Текстом комментария становится результат выполнения шаблона, который содержится в элементе xsclass="underline" comment.
Точно так же как и в случае с xsclass="underline" processing-instruction, результат выполнения шаблона должен содержать только текстовые узлы. Узлы других типов будут либо проигнорированы, либо вызовут ошибку.
В соответствии с синтаксисом XML, комментарий в XML не может содержать двух знаков "-" последовательно ("--") и оканчиваться на "-". Поэтому наличие таких последовательностей символов в тексте комментария будет являться в XSLT ошибкой. Для того чтобы избежать некорректного синтаксиса, процессор может разделять два последовательных минуса пробелом (заменять "--" на "- -") или добавлять пробел после завершающего минуса комментария.
Элемент:
<xsclass="underline" comment>
 | Please remove this later
 +</xsclass="underline" comment>
создаст комментарий:
<!--
| Please remove this later
+-->
Элемент xsclass="underline" processing-instruction
Синтаксис элемента представлен ниже:
<xsclass="underline" processing-instruction
name="{имя}">
<!-- Содержимое: шаблон -->
</xsclass="underline" processing-instruction>
Элемент xsclass="underline" processing-instruction создает в результирующем дереве узел инструкции по обработке. Обязательный атрибут name определяет имя целевого приложения, которому будет адресована инструкция по обработке. В этом атрибуте может быть указан шаблон значения атрибута.
Элемент:
<xsclass="underline" processing-instruction name="servlet">
<xsclass="underline" text>links="follow" session-timeout="7200000"</xsclass="underline" text>
</xsclass="underline" processing-instruction>
создаст в выходящем документе инструкцию по обработке вида:
<?servlet links="follow" session-timeout="7200000"?>
Содержимым создаваемой инструкции по обработке является результат выполнения шаблона, содержащегося внутри элемента xsclass="underline" processing- instruction. Этот результат должен содержать только текстовые узлы, в противном случае процессор может либо выдать ошибку, либо проигнорировать нетекстовые узлы вместе с их содержимым.
Инструкция по обработке не может содержать последовательности символов "?>", поскольку это было бы некорректно с точки зрения синтаксиса XML.
В случае, если результат выполнения шаблона содержит такую комбинацию, процессор может либо выдать ошибку, либо разделить символы "?" и ">" пробелом:"? >".
Имя инструкции по обработке, должно быть корректным XML-именем (но не равным при этом "xml" в любом регистре символов). Например, следующее определение будет совершенно корректным:
<xsclass="underline" processing-instruction name="_">
<xsclass="underline" text>logout _</xsclass="underline" text>
</xsclass="underline" processing-instruction>
В результате получится следующая инструкция: <?_ logout _?>
Для того чтобы создать в выходящем XML-документе инструкцию xml-stylesheet, которая используется для связывания документов со стилями и преобразованиями, можно воспользоваться следующим определением:
<xsclass="underline" processing-instruction name="xml-stylesheet">
<xsclass="underline" text>href="style.xsl" type="text/xsl"</xsclass="underline" text>
</xsclass="underline" processing-instruction>
Результирующий документ будет содержать инструкцию по обработке в виде:
<?xml-stylesheet href="style.xsl" type="text/xsl"?>
Элемент xsclass="underline" processing-instruction не может создать декларацию XML, несмотря на то, что с точки зрения синтаксиса (но не семантики) она имеет форму инструкции по обработке. Для вывода XML-декларации следует использовать элемент xsclass="underline" output.
Копирование узлов
Преобразование может включать в себя не только создание новых, но и копирование существующих узлов. Для этого можно использовать элементы xsclass="underline" copy и xsclass="underline" copy-of, использование которых будет подробно разобрано ниже.
Элемент xsclass="underline" copy
Ниже представлена синтаксическая конструкция этого элемента:
<xsclass="underline" copy
use-attribute-sets = "наборы атрибутов">
<!-- Содержимое: шаблон -->
</xsclass="underline" copy>
Элемент xsclass="underline" copy создает копию текущего узла вне зависимости от его типа. Вместе с текущим узлом в выходящее дерево копируются только узлы пространств имен, ассоциированные с ним. Дочерние узлы и узлы атрибутов в выходящий документ не копируются.
Если xsclass="underline" copy используется для копирования корневого узла или узда элемента, в выходящем документе процессор создает дочерний фрагмент дерева, являющийся результатом выполнения шаблона, содержащегося в xsclass="underline" copy.
Предположим, что в каждый элемент преобразовываемого документа нам нужно добавить атрибут element-count со значением, равным количеству его дочерних элементов, а все остальные узлы оставить, как есть.
<а> text
<b attr="value"/>
<c/>
<d>
text
<e/>
</d>
</a>
<xsclass="underline" template match="@*|node()">