2013-02-04 127 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,這就是我們的目標 - 我們所有人每天都在學習新的東西:) –