Если при обработке содержимого xsl:comment создаются узлы, не являющиеся строковыми, фиксируется ошибка. XSLT процессор может сигнализировать о такой ошибке. Если он этого не делает, то должен обработать ее сам, игнорируя неправильные узлы вместе с их содержимым.
Если результат обработки содержимого xsl:comment содержит строку – или заканчивается символом –, фиксируется ошибка. XSLT процессор может сигнализировать о такой ошибке. Если он этого не делает, он должен сам обработать ошибку, поставив пробел после всех символов –, за которыми следует либо другой символ –, либо конец строки.
<!– Category: instruction ->
<xsl:copy
use-attribute-sets = qnames >
<!– Content: template ->
</xsl:copy>
Элемент xsl:copy дает простой способ копировать текущий узел. В результате обработки элемента xsl:copy создается копия текущего узла. Узлы пространства имён текущего узла копируются автоматически как есть, однако ни атрибуты, ни потомки этого узла автоматически не копируются. Содержимое элемента xsl:copy является шаблоном для атрибутов и непосредственных потомков создаваемого узла. Указанное содержимое элемента обрабатывается для узлов только тех типов, которые могут иметь атрибуты или потомки (т.е. для корневых узлов и узлов элементов).
Элемент xsl:copy может иметь атрибут use-attribute- sets (см. [7.1.4 Именованные наборы атрибутов]). Последний используется только при копировании узлов элементов.
Корневой узел обрабатывается особым образом, поскольку корневой узел в конечном дереве создается неявно. Если текущий узел является корневым, то xsl:copy не будет создавать корневого узла, а будет использован только шаблон его содержимого.
Например, тождественное преобразование может быть записано с помощью xsl:copy следующим образом:
<xsl:template match='@*|node()'>
<xsl:copy>
<xsl:apply-templates select='@*|node()'/>
</xsl:copy>
</xsl:template>
Когда текущий узел является атрибутом, если попытка использовать xsl:attribute для создания нового атрибута с тем же именем что и текущий узел приводит к ошибке, то ошибкой будет также использовать xsl:copy (см. [7.1.3 Создание атрибутов с помощью xsl:attribute]).
Следующий пример показывает как атрибуты xml:lang могут быть легко скопированы из исходного дерева в конечное. Если в стиле определен следующий именованный шаблон:
<xsl:template name='apply-templates-copy-lang'>
<xsl:for-each select='@xml:lang'>
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:template>
то вместо
<xsl:apply-templates/>
можно легко сделать
<xsl:call-template name='apply-templates-copy-lang'/>
если необходимо скопировать атрибут xml:lang.
7.6 Вычисление подставляемого текста
В шаблоне для вычисления генерируемого текста, например, при выделении текста из исходного дерева или подстановке значения переменной может использоваться элемент xsl:value- of. Делается это в элементе xsl:value-of с помощью выражения, представленного как значение атрибута select. Заключив в фигурные скобки ({}), выражения можно также использовать в значении атрибутов фиксированных конечных элементов.
7.6.1 Создание текста с помощью xsl:value- of
<!– Category: instruction ->
<xsl:value-of
select = string-expression
disable-output-escaping = «yes» | «no» />