我的数据如下:
<Root>
<Node>
<Region>Central</Region>
<Provider>A</Provider>
<Value>100</Value>
</Node>
<Node>
<Region>Central</Region>
<Provider>B</Provider>
<Value>200</Value>
</Node
<Node>
<Region>Central</Region>
<Provider>B</Provider>
<Value>250</Value>
</Node>
<Node>
<Region>Eastern</Region>
<Provider>C</Provider>
<Value>50</Value>
</Node>
</Root>
试图改造为:
<Root>
<Region>
<Name>Central</Name>
<Provider>
<Name>A</Name>
<Item>
<Value>100</Value>
</Item>
</Provider>
<Provider>
<Name>B</Name>
<Item>
<Value>200</Value>
</Item>
<Item>
<Value>250</Value>
</Item>
</Provider>
</Region>
<Region>
<Name>Eastern</Name>
<Provider>
<Name>C</Name>
<Item>
<Value>50</Value>
</Item>
</Provider>
</Region>
</Root>
过去我使用过Muenchian Method,但是我试图使用XSLT 2.0构造xsl:for-each-group
来完成同样的事情,但目前还没有成功。
是否可以使用xsl:for-each-group
来完成上述操作?怎么样?
修改
这是我到目前为止所做的工作。但是,我不确定效率 - 特别是使用这样的结构强制解析器读取整个文档并对其进行排序?进来的数据已经按照我想要的方式排序。
<xsl:template match="Root">
<xsl:element name="Root">
<xsl:for-each-group select="Node" group-by="Region">
<xsl:element name="Region">
<xsl:element name="Name">
<xsl:value-of select="Region" />
</xsl:element>
<xsl:for-each-group select="current-group()" group-by="Provider">
<xsl:element name="Provider">
<xsl:for-each select="current-group()">
<xsl:element name="Item">
<xsl:value-of select="Value" />
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each-group>
</xsl:element>
</xsl:for-each-group>
</xsl:element>
</xsl:template>