如何连接具有相同名称的节点的所有值

时间:2013-03-06 16:37:08

标签: xml xslt-1.0

我的输入数据如下:

    <Data>
    <Sup_Offer  action='add'>80000001</Sup_Offer>
    <Sup_Offer  action='add'>80000002</Sup_Offer>
    <Sup_Offer  action='add'>80000003</Sup_Offer>
    </Data>

我正在使用下面的模板检查节点Sup_Offer是否存在,如果存在,我需要连接值。

    <xsl:template name="getDeactivateDataCmd">
      <xsl:choose>
        <xsl:when test="boolean(Sup_Offer)">
          <xsl:for-each select="/Data/Sup_Offer" >
            <xsl:value-of select="concat(Sup_Offer,';')"/>
          </xsl:for-each>
        </xsl:when>
        <xsl:otherwise>
        </xsl:otherwise>
       </xsl:choose>
    </xsl:template>

由于我是XML / XSLT的新手,有人可以告诉我:这有用吗?

2 个答案:

答案 0 :(得分:0)

让模板匹配完成更多工作可能会更简单一些。以下样式表返回字符串“80000001; 80000002; 80000003;”当你处理包含没有任何Sup_Offer子元素的数据元素的文档时处理你的样本输入和空字符串。

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

  <xsl:template match="Data">
    <xsl:apply-templates select="Sup_Offer"/>
  </xsl:template>

  <xsl:template match="Sup_Offer">
    <xsl:apply-templates/>
    <xsl:text>;</xsl:text>
  </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

此转化

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="Sup_Offer">
     <xsl:value-of select="concat(.,';')"/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档时:

<Data>
    <Sup_Offer  action='add'>80000001</Sup_Offer>
    <Sup_Offer  action='add'>80000002</Sup_Offer>
    <Sup_Offer  action='add'>80000003</Sup_Offer>
</Data>

会产生想要的正确结果:

80000001;80000002;80000003;