' последовательно ('
--
') и оканчиваться на '-
'. Поэтому наличие таких последовательностей символов в тексте комментария будет являться в XSLT ошибкой. Для того чтобы избежать некорректного синтаксиса, процессор может разделять два последовательных минуса пробелом (заменять '--
' на '- -
') или добавлять пробел после завершающего минуса комментария.
Элемент:
<xsl:comment>
 | Please remove this later
 +</xsl:comment>
создаст комментарий:
<!--
| Please remove this later
+-->
Элемент
Синтаксис элемента представлен ниже:
<xsl:processing-instruction
name='{
<!-- Содержимое: шаблон -->
</xsl:processing-instruction>
Элемент xsl:processing-instruction
создает в результирующем дереве узел инструкции по обработке. Обязательный атрибут name определяет имя целевого приложения, которому будет адресована инструкция по обработке. В этом атрибуте может быть указан шаблон значения атрибута.
Элемент:
<xsl:processing-instruction name='servlet'>
<xsl:text>links='follow' session-timeout='7200000'</xsl:text>
</xsl:processing-instruction>
создаст в выходящем документе инструкцию по обработке вида:
<?servlet links='follow' session-timeout='7200000'?>
Содержимым создаваемой инструкции по обработке является результат выполнения шаблона, содержащегося внутри элемента xsl:processing- instruction
. Этот результат должен содержать только текстовые узлы, в противном случае процессор может либо выдать ошибку, либо проигнорировать нетекстовые узлы вместе с их содержимым.
Инструкция по обработке не может содержать последовательности символов '?>
', поскольку это было бы некорректно с точки зрения синтаксиса XML.
В случае, если результат выполнения шаблона содержит такую комбинацию, процессор может либо выдать ошибку, либо разделить символы '?
' и '>
' пробелом:'? >
'.
Имя инструкции по обработке, должно быть корректным XML-именем (но не равным при этом 'xml
' в любом регистре символов). Например, следующее определение будет совершенно корректным:
<xsl:processing-instruction name='_'>
<xsl:text>logout _</xsl:text>
</xsl:processing-instruction>
В результате получится следующая инструкция: <?_ logout _?>
Для того чтобы создать в выходящем XML-документе инструкцию xml-stylesheet
, которая используется для связывания документов со стилями и преобразованиями, можно воспользоваться следующим определением:
<xsl:processing-instruction name='xml-stylesheet'>
<xsl:text>href='style.xsl' type='text/xsl'</xsl:text>
</xsl:processing-instruction>
Результирующий документ будет содержать инструкцию по обработке в виде:
<?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
используется для копирования корневого узла или узда элемента, в выходящем документе процессор создает дочерний фрагмент дерева, являющийся результатом выполнения шаблона, содержащегося в xsl:copy
.
Предположим, что в каждый элемент преобразовываемого документа нам нужно добавить атрибут element-count
со значением, равным количеству его дочерних элементов, а все остальные узлы оставить, как есть.
<а> text
<b attr='value'/>
<c/>
<d>
text
<e/>
</d>
</a>