根据他们的存在来衔接三个弦乐

时间:2017-07-19 04:50:07

标签: xslt

我要求将3个字符串与","连接起来。定界符:

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>

我怎样才能做到这一点,请建议。

此致 毗

2 个答案:

答案 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>

答案 1 :(得分: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