使用xslt 2.0在xml中分组

时间:2013-11-03 08:24:33

标签: xml xslt

我有输入xml

<document>   
      <row>   
        <column1>book1</column1>     
        <column2>00290</column2>      
        <column3>asddfr</column3>  
     </row>  
   <row>  
      <column1>book1</column1>  
      <column2>00290</column2>    
      <column3>cdcd</column3>  
    </row>  
     </document>

我想输出xml,而遍历整个xml我需要为每个xml分组和子分组

<book name="Book1"> 
    <title name="asddfr" code="00290"> 
        <title name="cdcd" code="00290"> 
 </book>

1 个答案:

答案 0 :(得分:0)

这个问题太老了,无法期待答案。但是,为了其他可能偶然发现XSLT 2.0分组的人的利益,下面是XSLT,它将有助于解释。

要求是按book1分组,即<column1>节点中XSLT 2.0提供<xsl:for-each-group>功能的值。

<xsl:for-each-group select="row" group-by="column1" >

分组完成后,可以使用属性<book>创建节点@name,其值存储在current-grouping-key()中。属性值模板,即花括号用于替换返回的值。

<book name="{current-grouping-key()}">

current-group()内循环以获取@name节点的@code<title>的下一步。

<xsl:for-each select="current-group()">

完整的XSLT如下所示

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

    <xsl:template match="document">
        <xsl:for-each-group select="row" group-by="column1" >
            <book name="{current-grouping-key()}">
                <xsl:for-each select="current-group()">
                    <title name="{column3}" code="{column2}" />
                </xsl:for-each>
            </book>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

输出

<book name="book1">
   <title name="asddfr" code="00290"/>
   <title name="cdcd" code="00290"/>
</book>