2013-02-04 110 views
3

节点名称当我有这两个变量XSLT创建变量

<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表达式,所以我预计''。显然我错过了一些东西。我想问题的关键是,使用&lt;...&gt;动态创建节点名称并不真正创建节点,而只是一些文本输出,因此如何才能在此处实现真正的节点创建?

回答

11

这种转变

<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 
+0

优秀(如ususal我应该说),我可以将这个应用到我真正的问题,我曾玩过xsl:元素,但没有找出括号,谢谢。 – Andreas

+0

完成,我仍然是新的stackoverflow :-)我不能投票,因为我没有足够的'声誉'呢。 – Andreas

+0

@Andreas,NP,这就是我们的目标 - 我们所有人每天都在学习新的东西:) –