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”, ключей не требует вообще, поэтому из-за ЕГО ПРОСТОТЫ можно предполагать, что новичкам оно (может быть) намного понятнее (п кр. мере, для поставленной задачи). |
© Vasil I. Yaroshevich, 2001-2005 Driven by DokuWiki © 2004-2005 Andreas Gohr |