该值如何在xsl中使用逗号

时间:2013-09-02 10:21:56

标签: xslt

xml文件如下所示我想要concat值name,add1,city,add2以逗号分隔

<Details>
<name>abc</name>
<profile>
<address>
<add1>ccc</add1>
<add2>bbb</add2>
<city>CA</city>
</address>
</profile>
</Details>

我想要输出如下: -

abc, ccc, CA, bbb

(我的意思是城市将在add2之前出现,如果任何值为空,那么它将相应调整)

3 个答案:

答案 0 :(得分:1)

如果您要输出详细信息元素中的所有文本节点,只需使用 xsl:for-each 对其进行迭代,然后使用 position()函数,如果节点不是第一个,则输出逗号

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

   <xsl:template match="Details">
      <xsl:for-each select="//text()">
         <xsl:if test="position() > 1">
            <xsl:text>,</xsl:text>
         </xsl:if>
         <xsl:value-of select="." />
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

因此,如果您的某个元素中没有文本,则不会输出或有额外的逗号。

答案 1 :(得分:0)

<xsl:variable name="name"> 
     <xsl:value-of select="Details/name"/>
</xsl:variable>
<xsl:variable name="add1"> 
     <xsl:value-of select="Details/profile/address/add1"/>
</xsl:variable>
<xsl:variable name="add2"> 
     <xsl:value-of select="Details/profile/address/add2"/>
</xsl:variable>
<xsl:variable name="city"> 
     <xsl:value-of select="Details/profile/address/city"/>
</xsl:variable>
<xsl:value-of select="concat($name,',',$add1,',',$city,',',$add2)"/><br>

如果add1返回abc, ccc, CA, bbb,它会显示O {\ P null这样的O / P然后它会显示为abc, , CA, bbb

答案 2 :(得分:0)

如果您使用的是XSLT 2.0,可以使用()运算符按照您想要的顺序构建序列,然后使用separator上的xsl:value-of属性输出整个序列逗号:

<xsl:template match="Details">
  <xsl:value-of select="(name, profile/address/add1, profile/address/city,
      profile/address/add2)" separator=", " />
</xsl:template>

如果要过滤掉具有空值的元素(例如,如果文档包含<city/>),那么您可以使用选择表达式的谓词来执行此操作:

(name, profile/address/add1, profile/address/city,
      profile/address/add2)[normalize-space()]

谓词从序列中删除任何值为空或完全由空格组成的节点。