1

我有一个输入 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 时,我需要对它们中的每一个进行分组和子分组

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

1 回答 1

0

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

要求是按XSLT 2.0 为其提供功能book1的节点中的值进行分组。<column1><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>
于 2017-09-29T07:29:04.137 回答