Новости | 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>