| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
egr 17.09.2002 15:08
Недавно тут была дискуссия о том как делать группировку. Я тут недавно приобрел книжку по XSLT и там есть пара примеров о том как это делается.<?xml version="1.0" encoding="windows-1251"?> <news> <item date="12.01.2002" title="header1">Бла-бла</item> <item date="12.01.2002" title="header2">Бла-бла</item> <item date="10.01.2002" title="header3">Бла-бла</item> <item date="10.01.2002" title="header4">Бла-бла</item> <item date="7.01.2002" title="header5">Бла-бла</item> <item date="7.01.2002" title="header6">Бла-бла</item> </news>Задача вывести это сгруппировав элементы по какому-либо параметру например по дате:
12.01.2002 все события за это число 10.01.2002 все события за это число 7.01.2002 все события за это числоС помощью XSLT это делается достаточно просто:
<?xml version="1.0" encoding="windows-1251" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:key name="dates" match="/news/item" use="@date"/>
<xsl:template match="/news">
<xsl:variable name="unique_date"
select="/news
/item[generate-id(.)=
generate-id(key('dates', @date))]
/@date"
/>
<dl>
<xsl:for-each select="$unique_date">
<dt><xsl:value-of select="."/></dt>
<dd>
<xsl:for-each select="key('dates', .)">
<b><xsl:value-of select="@title" /></b><br/>
<xsl:value-of select="." /><p/>
</xsl:for-each>
</dd>
</xsl:for-each>
</dl>
</xsl:template>
</xsl:stylesheet>