Как сгруппировать по значению из разных тегов? - PullRequest
0 голосов
/ 31 августа 2018

У меня есть 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 голосов
/ 31 августа 2018

Пока нет элемента, имеющего оба этих ключевых элемента, вы можете просто использовать group-by="UniqueKey, FirstNodeKey", поскольку он образует последовательность двух элементов, которая, в вашем случае, будет просто последовательностью с UniqueKey или FirstNodeKey, так как другой выбор пуст.

...