Создание XSLT для групповых данных - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть такие данные XML:

<data ItemCount="5">
<zrow GroupName="Manager"User="User1" />
<zrow GroupName="Developer"User="User2" />
<zrow GroupName="Manager"User="User3" />
<zrow GroupName="CEO"User="User4" />
<zrow GroupName="CEO"User="User5" />
</data>

Я хочу вывод как это:

Manager

User1

User3

Developer

User2

CEO

User4

User5

Каким должен быть мой XSLT? Я хочу создать XSLT, который должен преобразовать мои данные в вышеуказанный формат. Не могли бы вы помочь мне создать его?

1 Ответ

1 голос
/ 08 ноября 2011

Решение XSLT 2.0:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="data">
        <xsl:for-each-group select="zrow" group-by="@GroupName">
            <xsl:value-of select="current-grouping-key()" />
            <xsl:text>&#xa;</xsl:text>
            <xsl:value-of select="current-group()/@User" separator="&#xa;"/>
            <xsl:text>&#xa;</xsl:text>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

Решение XSLT 1.0 основано на методе Мюнхена:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:strip-space elements="*"/>
    <xsl:key name="byGroupName" match="zrow" use="@GroupName"/>
    <xsl:template
        match="zrow[generate-id()=
                    generate-id(key('byGroupName', @GroupName)[1])]">
        <xsl:value-of select="@GroupName"/>
        <xsl:text>&#xa;</xsl:text>
        <xsl:apply-templates select="key('byGroupName', @GroupName)" mode="out"/>
    </xsl:template>
    <xsl:template match="zrow" mode="out">
        <xsl:value-of select="@User"/>
        <xsl:text>&#xa;</xsl:text>
    </xsl:template>
    <xsl:template match="zrow"/>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...