2013-06-26 87 views
0

輸入:如何連接元素XSLT

<A> 
<T1> 
<element1>e1</element1> 
<element2>e2</element2> 
<element3>e3</element3> 
<element5>e5</element5> 
</T1> 
<T1> 
<element4>e4</element4> 
</T1> 


<T1> 
<element1>e1</element1> 
<element2>e2</element2> 
<element3>e3</element3> 
<element5>e5</element5> 
</T1> 

<T1> 
<element1>e1</element1> 
<element2>e2</element2> 
<element3>e3</element3> 
<element5>e5</element5> 
</T1> 
<T1> 
<element4>e4</element4> 
</T1> 


<T1> 
<element4>e4</element4> 
</T1> 
</A> 

在這裏,我們需要在T​​1元素執行循環。在這個T1中有5個元素,我們需要連接所有的元素。我們需要下面的輸出。請看看這個。

輸出:

<T1>e1e2e3e4e5</T1> 
<T1>e1e2e3e5</T1> 
<T1>e1e2e3e4e5</T1> 
<T1>e4</T1> 

我想下面的XSLT,但它是串聯所有的循環。

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
      <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="A/T1"> 
     <xsl:value-of select='concat(element1,element2,element3,element4,element5)'/> 
    </xsl:template> 

    <xsl:template match="text()"/> 
     <xsl:template match="/"> 
    <T1> 
    <xsl:apply-templates select="A/T1"/> 
    </T1> 

     </xsl:template> 

</xsl:stylesheet> 

上述XSLT是給輸出等。

<T1>e1e2e3e5e4e1e2e3e5e1e2e3e5e4e4</T1> 

回答

0

這應做到:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="T1"> 
     <T1><xsl:value-of select='.'/></T1> 
    </xsl:template> 

</xsl:stylesheet> 
0

這樣的錯誤表明,你是新來的XSL就像我,所以一些基本的解釋應該不會是無用的。 我會盡力解釋你爲什麼沒有得到你所期待的。

這裏:

<xsl:template match="text()"/> 
    <xsl:template match="/"> 

當你開始你的根標籤,你寫。

<T1> 

然後調用模板

<xsl:apply-templates select="A/T1"/> 

它適用您的xsl:每個T1標籤的位置值的:

<xsl:template match="A/T1"> 
    <xsl:value-of select='concat(element1,element2,element3,element4,element5)'/> 
</xsl:template> 

你的結果是那麼

<T1>e1e2e3e5e4e1e2e3e5e1e2e3e5e4e4 

,你最後關閉你的標籤:

</T1> 

所以,你的結果是:

<T1>e1e2e3e5e4e1e2e3e5e1e2e3e5e4e4</T1>. 

你想要的是得到你的T1標籤的分開的內容,所以應用的模板應該包含T1標籤定義

就像:

<xsl:template match="A/T1"> 
    <T1> 
    <xsl:value-of select='concat(element1,element2,element3,element4,element5)'/> 
    </T1> 
</xsl:template> 

然後,你不必再添加T1在你的模板根:

<xsl:template match="/"> 
    <xsl:apply-templates select="A/T1"/> 
</xsl:template>