我要求将3个字符串与","连接起来。定界符:
I / P XML:
<Data>
<First>XXX</First>
<Second>YYY</Second>
<Third>ZZZ</Third>
</Data>
如果所有元素都有数据,那么<Concatinate>XXX,YYY,ZZZ</Concatinate>
或如果第二个元素为空,则为<Concatinate>XXX,ZZZ</Concatinate>
或如果第三个元素为空,则
<Concatinate>XXX,YYY</Concatinate>
我怎样才能做到这一点,请建议。
此致 毗
答案 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