我有输入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>
答案 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>