Как использовать группу в xslt

У меня есть xml, который имеет столько элементов и большинство которых содержит атрибуты.. поскольку некоторые значения атрибутов - то же так, я должен сгруппировать их и генерировать разность xml. I/p Исключая:

<TestNode>
 <ABC1 value="10.7" format="$" />
 <ABC2 value="10.5" format="$" />
 <ABC3 value="20" format="Rs" />
 <ABC4 value="50" format="Rs" />
 <ABC5 value="10.5" format="$" />
</TestNode>

Я должен сгруппировать строки форматом.Примечание: Формат не фиксируется..., это может вырасти... O/P Исключая: действительно ли возможно добраться?Заранее спасибо...

5
задан Lachlan Roche 25 February 2010 в 13:26
поделиться

2 ответа

В XSLT 2.0 вы должны иметь возможность сделать это с помощью , current-grouping-key () и current-group ()

Пример:

<xsl:for-each-group 
    select="TestNode/*"
    group-by="@format"
>
    <group format="{current-grouping-key()}">
        <xsl:for-each select="current-group()">
            <xsl:copy-of select="."/>
        </xsl:for-each>
    </group>
</xsl:for-each-group>

См .: http://www.w3.org/TR/xslt20/#grouping

4
ответ дан 14 December 2019 в 01:06
поделиться

В XSLT 1.0 вы должны использовать мюнхианскую группировку.

Определите ключевой «формат», из которого мы можем легко выбрать все элементы по имени формата. Затем примените группировку Мюнчи, чтобы найти уникальные форматы во входных данных.

Тогда все становится просто. Шаблон «*» будет применяться один раз для каждого формата и использует ключ () для извлечения всех записей для этого формата.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes" />

    <xsl:key name="format" match="TestNode/*" use="@format" />

    <xsl:template match="TestNode">
        <body>
            <xsl:apply-templates select="*[generate-id(.)=generate-id(key('format',@format)[1])]"/>
        </body>
    </xsl:template>

    <xsl:template match="*">
        <format format="{@format}">
          <xsl:copy-of select="key('format', @format)" />
        </format>
    </xsl:template>

</xsl:stylesheet>
5
ответ дан 14 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: