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>
所以这意味着标签丢失了。这样做的正确语法是什么?提前谢谢!
答案 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" />