Группировка методом Мюнча
Группировка методом МюнчаМорда: СтандартнаяСераяЗеленая Главная / Портфель / Группировка методом Мюнча Запомнить № 12:
Группировка методом МюнчаОпубликовано:
24 сентября 2002 | Очень часто, при выводе данных, возникает задача сгруппировать эти данные по какому-либо признаку, — дате, категории, важности и т.д. С помощью связкиXML/XSLT это делается достаточно просто.Например у вас есть список новостей или событий в виде XML:
<news>
<item date="12.01.2002" title="Новая версия">
Вышла новая супер-пупер версия нашей софтины
для автоматического написания
кода, - вам даже не надо думать!
</item>
<item date="12.01.2002" title="Мы расширяемся">
И у нас появилась куча новых вакансий
</item>
<item date="10.01.2002" title="Новое имя">
Наша компания переименовывается в Poupkine Ltd.
</item>
<item date="10.01.2002" title="Итоги года">
За прошлый год мы заработали кучу денег, даже
не ожидали что столько заработаем.
</item>
<item date="7.01.2002" title="С рождеством">
Поздравляем вас с Рождеством
</item>
</news>
Задача заключается в том, чтобы вывести эти данные сгруппировав по дате:
Дата1
все события за это число
Дата2
все события за это число
Дата3
все события за это число
...
Где Дата1, Дата2, Дата3 … это уникальные значения атрибута date, взятые из конкретного набора данных.Я не буду подробно объяснять теоретические основы группировки методом Мюнча, — вы об этом можете прочесть сами в книге XSLT 2-е издание, автор Майкл Кэй, а просто приведу пример стилевой таблицы которая делает указанное преобразование:
<?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', .)">
<strong><xsl:value-of select="@title" /></strong><br/>
<xsl:value-of select="." /><p/>
</xsl:for-each>
</dd>
</xsl:for-each>
</dl>
</xsl:template>
</xsl:stylesheet>
В результате вы получаете требуемый результат в виде HTML:
<dl>
<dt>12.01.2002</dt>
<dd>
<strong>Новая версия</strong><br>
Вышла новая супер-пупер версия нашей софтины для
автоматического написания кода, - вам даже не надо думать!
<p>
<strong>Мы расширяемся</strong><br>
И у нас появилась куча новых вакансий
<p>
</dd>
<dt>10.01.2002</dt>
<dd>
<strong>Новое имя</strong><br>
Наша компания переименовывается в Poupkine Ltd.
<p>
<strong>Итоги года</strong><br>
За прошлый год мы заработали кучу денег,
даже не ожидали что столько заработаем.
<p>
</dd>
<dt>7.01.2002</dt>
<dd>
<strong>С рождеством</strong><br>
Поздравляем вас с Рождеством
<p>
</dd>
</dl>
Загрузить пример: muench.zip (Дата: 2.8.2003 Размер: 1.05 Kб)<< № 11 | Содержание | № 13 >>Из последнего№ 24 Работаем с .htpasswd 08.11.2003 (Изменено: 10.01.2004)№ 23 Самодокументирование парсерного кода 14.09.2003№ 22 Работаем с RSS 21.02.2003№ 21 Топологическая сортировка 16.02.2003№ 20 Установка 3-го парсера на хостинге 350mb.ru 12.02.2003ПолезноеParser 3Parser.ruXMLRaleigh.ruXMLZvon.orgГлавная / Портфель / Группировка методом Мюнча Запомнить Информация о сервереАвторРегистрация/настройки
содержание | 2 | Рецепты вин, настоек, наливок, ликеров, пива, шампанского
Используются технологии
uCoz