Вот пример, который делает некоторую подобную группировку, чтобы вывести следующее:
- май 2011
- 2011-05-10: Гомер
- 2011-05-09: Лиза
- апрель 2011
- 2011-04-07: Барт
- 2011-04-05: Барт
- 2011-04-02: Лиза
Это не совсем то, что у вас есть на скриншоте, но должно дать вам достаточно хорошее представление о том, как сделать эту группировку.
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
<xhtml:head>
<xhtml:title>Timesheet</xhtml:title>
<xforms:model>
<xforms:instance>
<instance>
<entry>
<start>2011-05-10</start>
<person>Homer</person>
</entry>
<entry>
<start>2011-05-09</start>
<person>Lisa</person>
</entry>
<entry>
<start>2011-04-07</start>
<person>Bart</person>
</entry>
<entry>
<start>2011-04-05</start>
<person>Bart</person>
</entry>
<entry>
<start>2011-04-02</start>
<person>Lisa</person>
</entry>
</instance>
</xforms:instance>
</xforms:model>
<xhtml:style type="text/css">
.xforms-repeat-selected-item-1, .xforms-repeat-selected-item-2 { background: transparent }
</xhtml:style>
</xhtml:head>
<xhtml:body>
<xxforms:variable name="entries" select="entry"/>
<xxforms:variable name="months" select="distinct-values($entries/start/substring(., 1, 7))"/>
<xhtml:ul>
<xforms:repeat nodeset="$months">
<xxforms:variable name="current-month" select="."/>
<xhtml:li>
<xforms:output value="format-date(xs:date(concat(., '-01')), '[MNn] [Y]')"/>
<xhtml:ul>
<xforms:repeat nodeset="$entries[substring(start, 1, 7) = $current-month]">
<xhtml:li>
<xforms:output ref="start"/>:
<xforms:output ref="person"/>
</xhtml:li>
</xforms:repeat>
</xhtml:ul>
</xhtml:li>
</xforms:repeat>
</xhtml:ul>
</xhtml:body>
</xhtml:html>