Q. Group by в XSLT

Есть XML:

<?xml version="1.0" encoding="UTF-8"?>
<data>
   <name>Vasya</name>
   <name>Petya</name>
   <name>Sergey</name>
   <name>Vasya</name>
   <name>Petr</name>
   <name>Sergey</name>
</data>

Задача получить после преобразования вот такой вот XML:

<?xml version="1.0" encoding="UTF-8"?>
<result>
   <name count="2">Vasya</name>
   <name count="1">Petya</name>
   <name count="2">Sergey</name>
   <name count="1">Petr</name>
</result>

Как будет выглядеть XSLT преобразование? Если словами то: надо убрать теги с повторяющимся контентом или если проводить наналогию с SQL, то как в XSLT делается GROUP BY?


A [taler]. Если для таких простых примеров, то не надо ничего мудрить (1 шаблон):

<xsl:template match="name">
  <xsl:if test="not(preceding-sibling::* = .)">
   <xsl:value-of select="."/>
   := <xsl:value-of select="count(../*[.=current()])"/><br/>
  </xsl:if>
</xsl:template>

ответ:

Vasya := 2
Petya := 1
Sergey := 2
Petr := 1

(в xml-теги сами переведете (?)


A [olpa]. Группировка-Группировка-Группировка


A [taler]. Olpa привел выше ссылку на алгоритм Мюнха на основе ключей, однако, как хорошо известно, число доступных и известных алгоритмов группировки в xslt существенно превышает единицу, хотя умение их оптимально применять (читай, мастерство xslt-писателя) полностью зависит от специфики и условий той или иной задачи.

Ни в коей мере не умаляя оригинальных заслуг Стива Мюнха, Джени Теннисон и Майкла Кэя в алгоритмизации решения задач группирования через ключи, хотелось бы, тем не менее, подчеркнуть, что решение, показанное выше как “FAQ-FAQ-FAQ”, ключей не требует вообще, поэтому из-за ЕГО ПРОСТОТЫ можно предполагать, что новичкам оно (может быть) намного понятнее (п кр. мере, для поставленной задачи).

 
  faq/simplegroupby.txt · Последние изменения: 2012/03/27 05:15
 
Нас поддерживают: По информации: Столовые трансформации. Рейтинг@Mail.ruliveinternet.ru