xml XSL中每个组如何使用
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19115109/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to use for each group in XSL
提问by Hash
im still learning for-each-groupwhat is the best way of grouping something like this using XSL?(by country) i'm trying to use XSL to convert this XML to another XML.
我仍在学习for-each-group使用 XSL 对此类内容进行分组的最佳方法是什么?(按国家/地区)我正在尝试使用 XSL 将此 XML 转换为另一个 XML。
<?xml version="1.0" encoding="UTF-8"?>
<Person>
<Student>
<Info Country="England" Name="Dan" Age="20" Class="C" />
</Student>
<Student>
<Info Country="England" Name="Dan" Age="20" Class="B" />
</Student>
<Student>
<Info Country="England" Name="Sam" Age="20" Class="A" />
</Student>
<Student>
<Info Country="Australia" Name="David" Age="22" Class="D" />
</Student>
<Student>
<Info Country="Australia" Name="David" Age="22" Class="A" />
</Student>
</Person>
回答by Martin Honnen
If you group by country you would start with e.g.
如果您按国家/地区分组,您将从例如开始
<xsl:template match="Person">
<xsl:for-each-group select="Student/Info" group-by="@Country">
<country name="{current-grouping-key()}">
</country>
</xsl:for-each-group>
</xsl:template>
Then you have to decide whether you want to further group the Infoelements in each country group, for instance by name:
然后,您必须决定是否要对Info每个国家/地区组中的元素进行进一步分组,例如按名称:
<xsl:template match="Person">
<xsl:for-each-group select="Student/Info" group-by="@Country">
<country name="{current-grouping-key()}">
<xsl:for-each-group select="current-group()" group-by="@Name">
<student name="{current-grouping-key()}">
<classes>
<xsl:for-each select="current-group()">
<class><xsl:value-of select="@Class"/></class>
</xsl:for-each>
</classes>
</student>
</xsl:for-each-group>
</country>
</xsl:for-each-group>
</xsl:template>

