Преобразование XSLT для группировки элементов по временному интервалу на основе временной метки - PullRequest
0 голосов
/ 05 июля 2018

У меня есть список элементов, которые я хочу сгруппировать по временному интервалу на основе информации о временной метке (в приведенном ниже примере начальная дата). Например, интервалы byc равны 3 секундам.

Например:

<ListItem>
    <item>
        <id>1</id>
        <startdate>2002-05-30T09:30:10.025+01:00</startdate>
    </item>
    <item>
        <id>2</id>
        <startdate>2002-05-30T09:30:11.025+01:00</startdate>
    </item>
    <item>
        <id>3</id>
        <startdate>2002-05-30T09:30:13.025+01:00</startdate>
    </item>
    <item>
        <id>4</id>
        <startdate>2002-05-30T09:30:14.025+01:00</startdate>
    </item>
    <item>
        <id>5</id>
        <startdate>2002-05-30T09:30:17.025+01:00</startdate>
    </item>
</ListItem>

Ожидаемый результат:

<ItemmGroupe>
    <groupe>
        <item>
            <id>1</id>
            <startdate>2002-05-30T09:30:10.025+01:00</startdate>
        </item>
        <item>
            <id>2</id>
            <startdate>2002-05-30T09:30:11.023+01:00</startdate>
        </item>
        <item>
            <id>3</id>
            <startdate>2002-05-30T09:30:13.020+01:00</startdate>
        </item>
    </groupe>
    <groupe>
        <item>
            <id>4</id>
            <startdate>2002-05-30T09:30:14.027+01:00</startdate>
        </item>
    </groupe>
    <groupe>
        <item>
            <id>5</id>
            <startdate>2002-05-30T09:30:17.025+01:00</startdate>
        </item>
    </groupe>
</ItemGroupe>

Как я могу сделать это с помощью преобразования xslt?

1 Ответ

0 голосов
/ 06 июля 2018

С XSLT 2.0 вы можете использовать

    <xsl:for-each-group select="item" 
             group-adjacent="my:timeSlot(xs:dateTime(startDate))">
      <groupe>
        <xsl:copy-of select="current-group()"/>
      ...

, где my:timeSlot вычисляет:

   xs:integer(($startDate - xs:dateTime('2000-01-01T00:00:00Z')) 
                 div xs:dayTimeDuration('PT3S'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...