2013-03-06 20 views
1

我的輸入數據如下:如何Concat的同名節點的所有值

<Data> 
    <Sup_Offer action='add'>80000001</Sup_Offer> 
    <Sup_Offer action='add'>80000002</Sup_Offer> 
    <Sup_Offer action='add'>80000003</Sup_Offer> 
    </Data> 

我使用下面的模板,以檢查是否節點Sup_Offer存在,如果存在的話,我需要來串聯值。

<xsl:template name="getDeactivateDataCmd"> 
     <xsl:choose> 
     <xsl:when test="boolean(Sup_Offer)"> 
      <xsl:for-each select="/Data/Sup_Offer" > 
      <xsl:value-of select="concat(Sup_Offer,';')"/> 
      </xsl:for-each> 
     </xsl:when> 
     <xsl:otherwise> 
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 

因爲我是新來的XML/XSLT可以有人告訴我:這會工作嗎?

回答

0

讓模板匹配完成更多工作可能會更簡單一些。以下樣式表返回字符串「80000001; 80000002; 80000003;」當你遞交你的示例輸入時,以及處理包含沒有任何Sup_Offer子元素的Data元素的文檔時的空字符串。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       version="1.0"> 
    <xsl:output method="text"/> 

    <xsl:template match="Data"> 
    <xsl:apply-templates select="Sup_Offer"/> 
    </xsl:template> 

    <xsl:template match="Sup_Offer"> 
    <xsl:apply-templates/> 
    <xsl:text>;</xsl:text> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Thanq C.M.Sperberg它幫了很多。如果我想輸出爲文本不被分隔;但相反每個值在一行將會是什麼將需要更改 – shaiksha 2013-03-07 10:00:25

0

這種轉變

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

<xsl:template match="Sup_Offer"> 
    <xsl:value-of select="concat(.,';')"/> 
</xsl:template> 
</xsl:stylesheet> 

時所提供的XML文檔應用:

<Data> 
    <Sup_Offer action='add'>80000001</Sup_Offer> 
    <Sup_Offer action='add'>80000002</Sup_Offer> 
    <Sup_Offer action='add'>80000003</Sup_Offer> 
</Data> 

產生想要的,正確的結果:

80000001;80000002;80000003; 
+0

非常感謝Dimitre。它符合我的目的:-) – shaiksha 2013-03-07 09:59:23

相關問題