首页
学习
活动
专区
工具
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中对多个节点进行分组并在公共元素下输出。

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

相关·内容

  • 学习 XSLT:XML文档转换的关键

    一个

    元素可能表示 HTML 表格、一件家具或其他东西 - 浏览器不知道如何显示它!

    01

    系统架构师论文-XML在网上银行中的应用

    网上银行是指在Internet上提供银行服务,即银行的客户无须到银行柜台办理业务,可以在家庭、办公室等能够连入Internet的任何一处,登录到银行的网站进行交易。这是一种崭新的银行运营模式,具有方便快捷、成本低廉、不受时间地点限制等优点。 本文通过论述的项目是某银行行网上银行系统的1.0版本到2.0版本的升级和改造,论述了 XML在Internet中的应用。我有幸参加了这个项目,承担在该项目中担当了部分的分析与设计的部分任务。系统的1.0版本存在诸如交易超时、作业比较慢、不能满足客户个性化、技术相対落后等缺点。在2.0该项目版本的设计和开发过程中,我们基于JAVA技术,采用J2EE构架,使用应用了 XML作为数据交换的标准,-在后台,基于业务数据建立了 XML数据库,存放签约客户的历更数据,同时在Web服务端,我们也应用了 XML,读取XML数据库中的数据,同时给客户提供了 “个性化"的服务。这些技术的采用,解决了 1.0版中存在的问题。但是,因为XML是一种新的标准,有些地方还不是很完善,在J2EE架构下,如何使用XML是我们应该一直关注的问题,本文就该问题也有所论述。

    01

    c语言解析xml文档

    DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个HTML或XML文档的常用方法。有一点 很重要,DOM的设计是以对象管理组织(OMG)的规约为基础的,因此可以用于任何编程语言。 Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。DOM实际上是以面向对象方式描述的文档模型。DOM定义了表示和修改文档所需的对象、这些对象的行为和属性以及这些对象之间的关系。可以把DOM认为是页面上数据和结构的一个树形表示,不过页面当然可能并不是以这种树的方式具体实现。

    02

    目前学术界最先进的数据包调度器介绍!

    随着链路速度的提高和CPU速度缩放速度的降低,软件中的数据包调度会导致较低的精度和较高的CPU利用率。通过将数据包调度卸载到诸如NIC之类的硬件,可以潜在地克服这些缺点。然而,为了保持软件分组调度器的灵活性,硬件中的分组调度器必须是可编程的,同时还必须快速且可扩展。硬件中最先进的数据包调度程序要么折衷了可扩展性(Push-In-First-Out(PIFO)),要么表达了各种数据包调度算法的能力(先进先出(FIFO)))。此外,即使是像PIFO这样的通用调度原语,其表达能力也不足以表达分组调度算法的某些关键类别。因此,在本文中,我们提出了PIFO原语的泛化,称为Push-In-Extract-Out(PIEO),它与PIFO一样,维护元素的有序列表,但与PIFO不同,PIFO只允许从列表的开头出队,PIEO通过在出队时支持基于断言的可编程过滤,允许从列表中的任意位置出队。接下来,我们介绍PIEO调度程序的快速且可扩展的硬件设计,并在FPGA上进行原型设计。总体而言,PIEO调度程序比PIFO具有更高的表达力和30倍以上的可伸缩性。

    02

    「企业级产品设计」金融行业中的敏捷设计路径的项目实践

    在时间资源极度紧缺的情况下,既要把握好行业风格的调性,同时还需要按时将设计交付给客户,不能像常规的设计流程般按步就班的落地方案,需要运用敏捷设计路径的设计思路,助力业务侧完成商业目标。 项目背景 本文为行业中敏捷设计路径的项目实践【金穗】。金穗是金融FT为福建省农信社打造一款提供动态、村务、服务等几大模块资源的数字化综合服务平台的小程序。通过以农业金融等方式助力农村振兴。 需要在5个工作日内,完成70+的页面输出,在时间紧、人力资源有限、对复杂的行业背景知识基本为空白的情况下,于是我们对金穗项目采用了敏捷

    04
    领券