当我有这两个变量时
<xsl:variable name="a" select="'Total'" />
<xsl:variable name="b" select="'500'" />
我想创建一个名为"a"的节点,其内容来自变量"b"。我必须将xsltproc与XSLT1.0和几个EXSLT扩展(其中包含节点集)一起使用,所以我已经实现了其中的一部分:
<xsl:template match="/">
<xsl:variable name="x" >
<<xsl:value-of select="$a" />>
<xsl:value-of select="$b" />
</<xsl:value-of select="$a" />>
</xsl:variable>
<xsl:value-of disable-output-escaping="yes" select="$x" />
</xsl:template>
确实指出了这一点(我暂时不在乎空白):
<?xml version="1.0"?>
<Total>
500
</Total>
但是:我想使用变量"x"作为节点集,以便进一步操作它(当然,我的现实生活示例更复杂)。我所做的是将其转换为一个节点集(使用exslt.org/common),这似乎有效,但访问内容却无效。
<xsl:variable name="nodes" select="common:node-set($x)" />
<xsl:value-of select="$nodes/Total" />
什么都没有。由于$nodes/Total应该是一个有效的XPATH 1.0表达式,因此我应该使用"500"。显然我错过了什么。我想重点是,使用<...>
动态创建节点名称并不是真正创建节点,而是一些文本输出,所以我如何在这里实现真正的节点创建?
此转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="a" select="'Total'" />
<xsl:variable name="b" select="'500'" />
<xsl:template match="/*">
<xsl:variable name="rtfX">
<xsl:element name="{$a}">
<xsl:value-of select="$b"/>
</xsl:element>
</xsl:variable>
<xsl:value-of select="ext:node-set($rtfX)/Total"/>
</xsl:template>
</xsl:stylesheet>
应用于任何XML文档(未使用)时,会产生所需的正确结果:
500