如何按不同标签的值分组?

时间:2018-08-31 17:05:39

标签: xslt xslt-grouping

我有一个类似以下的XML:

<DataSet>
 <FirstNode>
  <UniqueKey>111</UniqueKey>
 </FirstNode>
 <FirstNode>
  <UniqueKey>123</UniqueKey>
 </FirstNode>
 <FirstNode>
  <UniqueKey>144</UniqueKey>
 </FirstNode>
 <SecondNode>
  <FirstNodeKey>111</FirstNodeKey>
 </SecondNode>
 <SecondNode>
  <FirstNodeKey>123</FirstNodeKey>
 </SecondNode>
 <SecondNode>
  <FirstNodeKey>144</FirstNodeKey>
 </SecondNode>
</DataSet>

我想使用XSLT来获取:

<DataSet>
     <FirstNode>
      <UniqueKey>111</UniqueKey>
     </FirstNode>
     <SecondNode>
      <FirstNodeKey>111</FirstNodeKey>
     </SecondNode>
</DataSet>
<DataSet>
     <FirstNode>
      <UniqueKey>123</UniqueKey>
     </FirstNode>
     <SecondNode>
      <FirstNodeKey>123</FirstNodeKey>
     </SecondNode>
</DataSet>
<DataSet>
     <FirstNode>
      <UniqueKey>144</UniqueKey>
     </FirstNode>
     <SecondNode>
      <FirstNodeKey>144</FirstNodeKey>
     </SecondNode>
</DataSet>

如果标签相同,我可以使用:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="DataSet">
      <xsl:for-each-group select="*" group-by="UniqueKey">
          <Updates>
              <xsl:copy-of select="current-group()"/>
          </Updates>
      </xsl:for-each-group>
  </xsl:template>
</xsl:stylesheet>

如果标签不同,该怎么办?如何将这两个不同的标签分组? (我的情况是UniqueKey和FirstNodeKey)。

预先感谢

1 个答案:

答案 0 :(得分:1)

只要没有同时包含这两个关键元素的元素,您就可以简单地使用group-by="UniqueKey, FirstNodeKey",因为它形成了两个元素的序列,在您的情况下,它们将简单地是两个{{1 }}或UniqueKey,因为另一个选择为空。