XSLT logi c для добавления последовательности для комбинации элементов с одинаковыми датами и полем ID - PullRequest
0 голосов
/ 17 марта 2020

Я изо всех сил пытаюсь создать logi c для преобразования.

Logi c: "Seq" Последовательный номер, используемый для создания уникального ключа, когда поля ID и Date равны.

<root>
    <Record>
        <ID>11</ID>
        <date>2020-03-11-07:00</date>
        <quantity>10</quantity>
    </Record>
    <Record>
        <ID>13</ID>
        <date>2020-03-12-07:00</date>
        <quantity>20</quantity>
    </Record>
    <Record>
        <ID>15</ID>
        <date>2020-03-13-07:00</date>
        <quantity>40</quantity>
    </Record>
    <Record>
        <ID>11</ID>
        <date>2020-03-11-07:00</date>
        <quantity>5</quantity>
    </Record>
    <Record>
        <ID>13</ID>
        <date>2020-03-17-07:00</date>
        <quantity>100</quantity>
    </Record>
</root>

к, Выход

ID,seq,Date,quantity
11,1,2020-03-11-07:00,10
11,2,2020-03-11-07:00,5
13,1,2020-03-12-07:00,20
15,1,2020-03-13-07:00,40
13,1,2020-03-17-07:00,100

1 Ответ

0 голосов
/ 17 марта 2020

В XSLT 3 это простая проблема группировки с составным ключом:

<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:output method="text" />

  <xsl:template match="root">
    <xsl:text>ID,seq,Date,quantity&#10;</xsl:text>
    <xsl:for-each-group select="Record" composite="yes" group-by="ID, date">
        <xsl:apply-templates select="current-group()"/>
    </xsl:for-each-group>
  </xsl:template>

  <xsl:template match="Record">
      <xsl:value-of select="ID, position(), date, quantity" separator=","/>
      <xsl:text>&#10;</xsl:text>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/93dFepy

XSLT 3 может использоваться с Saxon 9.8 и позже или Альтова XML 2017 R3 или позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...