首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在XSLT 1.0中对多个节点进行分组并在公共元素下输出

在XSLT 1.0中,对多个节点进行分组并在公共元素下输出可以通过使用<xsl:key>元素来定义键值,并结合<xsl:for-each><xsl:sort>元素来实现。以下是一个示例,展示如何对XML文档中的多个节点进行分组并在公共元素下输出。

假设我们有以下XML文档:

代码语言:txt
复制
<?xml version="1.0" encoding="UTF-8"?>
<items>
    <item category="A">
        <name>Item 1</name>
    </item>
    <item category="B">
        <name>Item 2</name>
    </item>
    <item category="A">
        <name>Item 3</name>
    </item>
    <item category="C">
        <name>Item 4</name>
    </item>
    <item category="B">
        <name>Item 5</name>
    </item>
</items>

我们希望将这些<item>元素按category属性进行分组,并在每个类别下输出所有项目名称。以下是相应的XSLT 1.0样式表:

代码语言:txt
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <!-- 定义键值 -->
    <xsl:key name="items-by-category" match="item" use="@category"/>

    <!-- 模板匹配根节点 -->
    <xsl:template match="/">
        <categories>
            <!-- 对类别进行排序 -->
            <xsl:for-each select="items/item[generate-id() = generate-id(key('items-by-category', @category)[1])]">
                <xsl:sort select="@category"/>
                <category>
                    <xsl:value-of select="@category"/>
                    <items>
                        <!-- 输出同一类别的所有项目 -->
                        <xsl:for-each select="key('items-by-category', @category)">
                            <item>
                                <xsl:value-of select="name"/>
                            </item>
                        </xsl:for-each>
                    </items>
                </category>
            </xsl:for-each>
        </categories>
    </xsl:template>

</xsl:stylesheet>

解释

  1. 定义键值
  2. 定义键值
  3. 这行代码定义了一个键值,用于按category属性对<item>元素进行分组。
  4. 模板匹配根节点
  5. 模板匹配根节点
    • generate-id()函数用于生成唯一标识符,generate-id(key('items-by-category', @category)[1])用于获取每个类别的第一个元素的唯一标识符。
    • <xsl:for-each>循环遍历每个类别的第一个元素,并对其进行排序。
    • 内部的<xsl:for-each>循环遍历同一类别的所有元素,并输出它们的名称。

输出结果

代码语言:txt
复制
<?xml version="1.0" encoding="UTF-8"?>
<categories>
    <category>A</category>
    <items>
        <item>Item 1</item>
        <item>Item 3</item>
    </items>
    <category>B</category>
    <items>
        <item>Item 2</item>
        <item>Item 5</item>
    </items>
    <category>C</category>
    <items>
        <item>Item 4</item>
    </items>
</categories>

参考链接

通过这种方式,你可以在XSLT 1.0中对多个节点进行分组并在公共元素下输出。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券