XSLT:按两次分组,首先在同一个标记内,然后按两个不同的标记分组
我想对以下XML进行分组:XSLT:按两次分组,首先在同一个标记内,然后按两个不同的标记分组,xslt,xslt-grouping,Xslt,Xslt Grouping,我想对以下XML进行分组: <DataSet> <FirstNode> <UniqueKey>111</UniqueKey> <OtherKey>552</OtherKey> </FirstNode> <FirstNode> <UniqueKey>123</UniqueKey> <OtherKey>552</O
<DataSet>
<FirstNode>
<UniqueKey>111</UniqueKey>
<OtherKey>552</OtherKey>
</FirstNode>
<FirstNode>
<UniqueKey>123</UniqueKey>
<OtherKey>552</OtherKey>
</FirstNode>
<FirstNode>
<UniqueKey>154</UniqueKey>
<OtherKey>553</OtherKey>
</FirstNode>
<SecondNode>
<FirstNodeKey>111</FirstNodeKey>
</SecondNode>
<SecondNode>
<FirstNodeKey>123></FirstNodeKey>
</SecondNode>
<SecondNode>
<FirstNodeKey>154></FirstNodeKey>
</SecondNode>
</DataSet>
111
552
123
552
154
553
111
123>
154>
我想用XSLT生成以下xml:
<DataSet>
<FirstNode>
<UniqueKey>111</UniqueKey>
<OtherKey>552</OtherKey>
</FirstNode>
<FirstNode>
<UniqueKey>123</UniqueKey>
<OtherKey>552</OtherKey>
</FirstNode>
<SecondNode>
<FirstNodeKey>111</FirstNodeKey>
</SecondNode>
<SecondNode>
<FirstNodeKey>123></FirstNodeKey>
</SecondNode>
</DataSet>
<DataSet>
<FirstNode>
<UniqueKey>154</UniqueKey>
<OtherKey>553</OtherKey>
</FirstNode>
<SecondNode>
<FirstNodeKey>154></FirstNodeKey>
</SecondNode>
</DataSet>
111
552
123
552
111
123>
154
553
154>
基本上,我想先按OtherKey对FirstNodes进行分组,然后按UniqueKey和FirstNodeKey进行分组。然后,每个都应包含在
中。我可以使用分组来实现这一点吗
提前感谢您的帮助 您似乎只想将
FirstNode
元素按OtherKey
子元素分组,然后根据current-group()/UniqueKey
引用任何SecondNode
元素:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output method="xml" indent="yes"/>
<xsl:key name="second" match="SecondNode" use="FirstNodeKey"/>
<xsl:template match="DataSet">
<xsl:variable name="ds" select="."/>
<xsl:for-each-group select="FirstNode" group-by="OtherKey">
<xsl:copy select="$ds">
<xsl:copy-of select="current-group(), key('second', current-group()/UniqueKey, .)"/>
</xsl:copy>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
这就是XSLT 3与Saxon 9.8(例如at)或Altova 2018一起使用,对于XSLT 2,您可以详细说明
<xsl:copy select="$ds">
<xsl:copy-of select="current-group(), key('second', current-group()/UniqueKey, .)"/>
</xsl:copy>
作为
当然,如果还有其他节点要处理,请用标识模板替换
xsl:mode
声明。请指定您使用的XSLT版本。谢谢!我正在使用XSLT2,我将使用它做什么?
<DataSet>
<xsl:copy-of select="current-group(), key('second', current-group()/UniqueKey, $ds)"/>
</DataSet>