如何在变量中创建一个元素

时间:2011-10-05 02:01:18

标签: xslt

XSLT 1.0    我需要一个具有以下结构的变量,基本上我需要构造一个实际上是一个元素的变量。我知道它看起来很傻但我需要这样的东西,因为其他东西的限制。

 <xsl:variable name="options">
                <xsl:element name="option">
                        <xsl:attribute name="value">
                            <xsl:text>test1</xsl:text>
                        </xsl:attribute>

                       <xsl:text>test1</xsl:text>
                    </xsl:element>
        </xsl:variable>

现在的问题是,我稍后在模板中用

调用它
<xsl:value-of select="$options"/>

输出html只有test1而不是我想要的

<option>test1</option>

所以这意味着标签丢失了。这样做的正确语法是什么?提前谢谢!

2 个答案:

答案 0 :(得分:2)

您需要区分<xsl:value-of><xsl:copy-of>

在XSLT 1.0中,<xsl:value-of>指令创建一个文本节点,其中包含评估select属性中指定的XPath表达式的结果的字符串值。根据定义,元素的字符串值是其所有后代文本节点的串联(按文档顺序) - 这是您获取字符串"test1"输出的方式。

相比之下:

<xsl:copy-of>

输出由select属性中指定的XPath表达式选择的节点集的每个节点的副本。

因此,为了复制$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>

答案 1 :(得分:1)

尝试:

<xsl:copy-of select="$options" />