【问题标题】:How to group by value from different tags?如何按不同标签的值分组?
【发布时间】:2018-08-31 17:05:39
【问题描述】:

我有一个如下的 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)。

提前致谢

【问题讨论】:

    标签: xslt xslt-grouping


    【解决方案1】:

    只要没有元素同时具有这两个关键元素,您就可以简单地使用group-by="UniqueKey, FirstNodeKey",因为这形成了两个元素的序列,在您的情况下,这将只是一个带有UniqueKey 或@ 的序列987654324@,因为其他选项为空。

    【讨论】:

    • 谢谢!但现在我有了另一个用例。现在,如果我想通过仅存在于 中的标记对 进行分组,然后将 分组怎么办?例如 111552... 结果将类似于 111552 OtherKey>123552
    • 请使用格式正确的输入样本、所需输出、您尝试过的代码和当前获得的输出提出一个新问题。要求我们从 cmets 中发布的代码中理解新需求没有多大意义。
    • Martin,我在这里提出了一个新问题:stackoverflow.com/questions/52121756/… 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2019-03-21
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2020-05-26
    • 2014-07-10
    • 1970-01-01
    相关资源
    最近更新 更多