xslt - 使用 XSLT 进行数据透视

标签 xslt pivot

我有一个像这样的 xml 文件:

<root>
    <item>
        <name>one</name>
        <status>good</status>
    </item>
    <item>
        <name>two</name>
        <status>good</status>
    </item>
    <item>
        <name>three</name>
        <status>bad</status>
    </item>
    <item>
        <name>four</name>
        <status>ugly</status>
    </item>
    <item>
        <name>five</name>
        <status>bad</status>
    </item>
</root>

我想使用 XSLT 对其进行转换以获得如下内容:

<root>
    <items><status>good</status>
        <name>one</name>
        <name>two</name>
    </items>
    <items><status>bad</status>
        <name>three</name>
        <name>five</name>
    </items>
    <items><status>ugly</status>
        <name>four</name>
    </items>
</root>

换句话说,我得到了一个项目列表,每个项目都有一个状态,我想将其转换为一个状态列表,每个状态都有一个项目列表。

我最初的想法是依次匹配每个状态类型的应用模板,但这意味着我必须知道完整的状态列表。有更好的方法吗?

感谢您的帮助。

最佳答案

慕尼黑来救援!

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes" encoding="UTF-8"/>

    <xsl:key name="muench" match="/root/item/status" use="."/>

    <xsl:template match="/">
        <root>
        <xsl:for-each select="/root/item/status[generate-id() = generate-id(key('muench',.)[1])]">
            <xsl:call-template name="pivot">
                <xsl:with-param name="status" select="."/>
            </xsl:call-template>
        </xsl:for-each>
        </root>
    </xsl:template>

    <xsl:template name="pivot">
        <xsl:param name="status"/>
        <items>
            <status><xsl:value-of select="$status"/></status>
            <xsl:for-each select="/root/item[status=$status]">
                <name><xsl:value-of select="name"/></name>
            </xsl:for-each>
        </items>
    </xsl:template>

</xsl:stylesheet>

关于xslt - 使用 XSLT 进行数据透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/424348/

相关文章:

python - 如何旋转数据框

sql - TOP 减慢查询速度

XSLT:我可以全局声明一个变量,然后给它赋值吗

xml - 两列表式布局 (XSLT)

xml - Muenchian 分组 - 在节点内分组,而不是在整个文档内分组

python - 在 Python 中旋转多个重复列

MySQL 动态创建行之外的列

xml - 如何在xslt中提取这种格式

java资源加载多个文件

sql-server-2008 - 多个层次结构(森林?)中的成员到一个表中