I have an input
<features>
<feature name="Television" featureSpecID="2000">
<displayName>TV</displayName>
<parameters>
<parameter name="Remote" >
</parameter>
<parameter name="Cable Box">
</parameter>
<parameter name="Carrier"/>
</parameter>
</parameters>
where I should convert as
<productname>Remote;Cable Box;Carrier</productname>
I tried my code by doing for-each of parameter
<xsl:if test='count(tns:parameters/tns:parameter) > "0"'>
<xsl:for-each select="tns:parameters/tns:parameter">
<productname>
<xsl:value-of select='concat(@name,";")'/>
</productname>
</xsl:for-each>
</xsl:if>
The <productname>
node should be outside the <xsl:for-each>
loop. Please modify it as below
<productname>
<xsl:for-each select="tns:parameters/tns:parameter">
...
</xsl:for-each>
</productname>
A condition needs to be added to not append the semi-colon
at the end of the product names according to sample output.
<xsl:if test="position() != last()">
<xsl:value-of select="';'"/>
</xsl:if>
XSLT code change
<productname>
<xsl:for-each select="tns:parameters/tns:parameter">
<xsl:value-of select="@name" />
<xsl:if test="position() != last()">
<xsl:value-of select="';'"/>
</xsl:if>
</xsl:for-each>
</productname>
Output
<productname>Remote;Cable Box;Carrier</productname>