xslt количество наборов узлов, возвращаемых ключом

В моем xslt я пытаюсь определить количество различных значений schedule_id в моих <event/>, чтобы я мог вывести таблицу, в которой каждый столбец используется для одного schedule_id. Следующий ключ должен получить наборы узлов, сгруппированные так, как мне нужно. Итак, как мне определить, сколько узлов возвращается?

<xsl:key name="events-by-schedule" match="event" use="@schedule_id" />

Примеры событий с 3 (число, которое я пытаюсь вычислить) разными schedule_id:

<event event_id="6" date="2009-05-27" schedule_id="4">
    <ev_title>Ed's Bday</ev_title>
</event>
<event event_id="4" date="2009-11-11" schedule_id="0">
    <ev_title>Remembrance Day</ev_title>
</event>
<event event_id="6" date="2009-08-17" schedule_id="23">
    <ev_title>>Lunch with Bill</ev_title>
</event>
<event event_id="1" date="2009-12-25" schedule_id="0">
    <ev_title>Christmas</ev_title>
</event>
<event event_id="6" date="2009-05-02" schedule_id="4">
    <ev_title>Beth's Bday</ev_title>
</event>
<event event_id="6" date="2009-10-01" schedule_id="23">
    <ev_title>Performance Review</ev_title>
</event>

person dnagirl    schedule 19.10.2009    source источник


Ответы (1)


Искомый XPath:

count(
  event[
    generate-id()
    = 
    generate-id(key('events-by-schedule', @schedule_id)[1])
  ]
)

По сути, это мюнхенская группировка.

Он подсчитывает все <event> узлов, которые являются первыми в своих соответствующих группах — в терминах XPath это так: их идентификатор должен совпадать с идентификатором первого узла группы.

person Tomalak    schedule 19.10.2009
comment
Спасибо! Я шел в этом направлении, но не мог уложиться в голове. - person dnagirl; 19.10.2009