2013-03-06 42 views
1

我的输入数据如下:如何Concat的同名节点的所有值

<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可以有人告诉我:这会工作吗?

回答

0

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

<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> 
+0

Thanq C.M.Sperberg它帮了很多。如果我想输出为文本不被分隔;但相反每个值在一行将会是什么将需要更改 – shaiksha 2013-03-07 10:00:25

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; 
+0

非常感谢Dimitre。它符合我的目的:-) – shaiksha 2013-03-07 09:59:23

相关问题