按标签进行XSL连接

时间:2014-03-07 17:58:37

标签: xml xslt concatenation

如果我有以下XML

<Set>
<Row>
  <DBNAME>X</DBNAME>
  <ID>1</ID> 
</Row>
 <Row>
  <DBNAME>X</DBNAME>
  <ID>2</ID> 
</Row>
 <Row>
  <DBNAME>Y</DBNAME>
  <ID>1</ID> 
</Row>
 <Row>
  <DBNAME>Y</DBNAME>
  <ID>4</ID> 
</Row>
</Set>

我需要转换为这种格式。

<RESULTSET>
    <RESULT>
    <DBNAME>X</DBNAME>
    <ID>1,2</ID>
    </RESULT>
    <RESULT>
    <DBNAME>Y</DBNAME>
    <ID>1,4</ID>
    </RESULT>
</RESULTSET>

我需要做什么。 目前没有DBNAME的条件我可以做类似的事情

<ID>
<xsl:for-each select="Set">
<xsl:choose>
    <xsl:when test="position() = 1">
    <xsl:value-of select="ID"></xsl:value-of>
    </xsl:when>
       <xsl:otherwise>
                ,<xsl:value-of select="ID"></xsl:value-of>
       </xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</ID>

给我<ID>1,2,1,4<ID>

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

使用分组,Muenchian grouping与XSLT 1.0和XSLT 2.0

<xsl:template match="Set">
  <RESULTSET>
    <xsl:for-each-group select="Row" group-by="DBNAME">
      <RESULT>
        <xsl:copy-of select="DBNAME"/>
        <ID><xsl:value-of select="current-group()/ID" separator=","/></ID>
      </RESULT>
    </xsl:for-each-group>
  </RESULTSET>
</xsl:template>