4

当我有这两个变量时

<xsl:variable name="a" select="'Total'" />
<xsl:variable name="b" select="'500'" />

我想创建一个名为“a”的节点及其来自变量“b”的内容。我必须将 xsltproc 与 XSLT 1.0 和几个 EXSLT 扩展(其中的节点集)一起使用,所以我已经实现了其中的一部分:

<xsl:template match="/">
  <xsl:variable name="x" >
    &lt;<xsl:value-of  select="$a" />&gt;
        <xsl:value-of  select="$b" />
    &lt;/<xsl:value-of  select="$a" />&gt;
  </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" />

一事无成。我本来期望 ' 500 ' 因为 $nodes/Total 应该是一个有效的 XPATH 1.0 表达式。显然我错过了一些东西。我想关键是节点名称的动态创建&lt;...&gt;并没有真正创建节点,而只是一些文本输出,所以我怎样才能在这里实现真正的节点创建?

4

1 回答 1

13

这种转变

<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
于 2013-02-06T04:05:15.137 回答