4

これら2つの変数がある場合

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

変数「a」の名前と変数「b」の内容を持つノードを作成したいと思います。XSLT 1.0 といくつかの EXSLT 拡張機能 (それらの間のノード セット) で xsltproc を使用する必要があるため、その一部を達成しました。

<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" />

何にもつながりません。$nodes/Total は有効な XPATH 1.0 式である必要があるため、 ' 500 'を期待していました。明らかに私は何かが欠けています。ポイントは、ノード名を動的に作成し&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 に答える