Нужно сделать разницу между <xsl:value-of>
и <xsl:copy-of>
В XSLT 1.0 инструкция <xsl:value-of>
создает текстовый узел, который содержит строковое значение результата вычисления выражения XPath, указанного в атрибуте select
. По определению, строковое значение элемента - это конкатенация (в порядке документа) всех его потомков текстовых узлов - так вы получите строку "test1"
output.
Для контраста:
<xsl:copy-of>
выводит копию каждого узла набора узлов, выбранного с помощью выражения XPath, указанного в атрибуте select
.
Поэтому, чтобы скопировать полное содержимое $options
, вам необходимо указать:
<xsl:copy-of select="$options" />
Вот полный пример :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vOptions">
<option value="test1">test1</option>
</xsl:variable>
<xsl:template match="/">
<xsl:copy-of select="$vOptions"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к любому XML-документу (не используется), получается нужный, правильный результат :
<option value="test1">test1</option>