2017-07-19 20 views
-1

的三個字符串我有一個要求,以串聯的3串 「」 分隔符:Concatinating基於其所有腦幹

I/P XML:

<Data> 
<First>XXX</First> 
<Second>YYY</Second> 
<Third>ZZZ</Third> 
</Data> 

O/P預計:

如果所有元素具有數據然後<Concatinate>XXX,YYY,ZZZ</Concatinate>

或如果第二個元素是空的,則<Concatinate>XXX,ZZZ</Concatinate>

或者如果第三個元素是空的,則

<Concatinate>XXX,YYY</Concatinate> 

我怎樣才能做到這一點,請建議。

Regards, Vishnu。

+0

請添加任何你已經嘗試小號遠。這將有助於提供正確的答案。 –

+0

您的處理器是否支持XSLT 2.0? –

+0

@Michael,是的,我的處理器支持XSLT 2.0,但是這個解決方案需要在現有的XSLT 1.0中實現。 –

回答

1

XSLT 1.0

<xsl:template match="Data"> 
     <Concatinate> 
      <!-- Matching all Child that is not empty --> 
     <xsl:for-each select="child::*[normalize-space()]"> 
      <xsl:value-of select="."/> 
      <!-- below code is use to put comma if position is not last --> 
      <xsl:if test="position()!=last()"> 
       <xsl:text>,</xsl:text> 
      </xsl:if> 
     </xsl:for-each> 
     </Concatinate> 
    </xsl:template> 
+0

請編輯您的答案,爲您的代碼提供一些精確度(說明它的工作原理)。 – N0un

+0

它到數據元素的每個子元素,並將其值和逗號(除最後一個元素) –

+0

好的,但請編輯您的答案與這些信息,以確定stackoverflow的指導方針所需的答案格式。 – N0un

0

XSLT 2.0

<xsl:template match="Data"> 
     <Concatinate><xsl:value-of select="First[node()]|Second[node()]|Third[node()]" separator=","/></Concatinate> 
    </xsl:template> 

XSLT 1.0

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="Data"> 
     <Concatinate><xsl:apply-templates/></Concatinate> 
    </xsl:template> 

    <!-- Template to handle Child Element --> 
    <xsl:template match="First[node()]|Second[node()]|Third[node()]"> 
     <xsl:if test="preceding-sibling::*[node()]"><xsl:text>,</xsl:text></xsl:if> 
     <xsl:value-of select="."/> 
    </xsl:template> 
</xsl:stylesheet 
+0

感謝@Rupesh,它在XSLT2.0中工作;但我想在XSLT1.0中實現這個功能,請幫忙嗎? –

+1

針對XSLT1.0解決方案您參考@uday答案 – Rupesh