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

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

相关·内容

  • XSL、XSLT

    xslt如何定义变量 如何实现递归 如何进行非空的判断 xsl:for-each 元素允许xslt中循环 ?...(图片来自:https://www.w3school.com.cn/xsl/xsl_for_each.asp) 需要注意的是: 正斜杠为子目录 for-each使用value-of的情况,通过...select选择节点的时候,直接使用 节点名称即可,节点路径相对于上一级的select继续往下层延申 提到的过滤运算符也有必要了解一: ?...(图片来自:https://www.w3school.com.cn/xsl/el_apply-imports.asp) 引入一个外部的样式表,这个可以多个文件共用部分样式的时候可以使用这种方法 xsl...xsl:copy 创建当前节点的一个副本 xsl:copy-of 创建当前节点的一个副本(带有子节点及属性) 把相同节点多个副本插入到输出的不同位置

    1.8K20

    Java 中文官方教程 2022 版(三十八)

    管道 (|) 键表示 或 子元素可以包含在 元素中,而在 (PERSONA | PGROUP) 分组后的加号 (+) 键表示必须包含至少一个或多个这些子元素中的任意一个..., (PERSONA | PGROUP)+)> 如果在元素后面添加星号 (*),则可以包含零个或多个该子元素的实例。 但是,在这种情况文档的某个部分中有多个标题是没有意义的。...例如,您将看到 DOM 中实体引用和 CDATA 部分的样子。也许最重要的是,您将看到文本节点(包含实际数据)如何存在于 DOM 中的元素节点。...本节结束时,您还将学习如何使用 XML Schema 定义来验证包含来自多个命名空间的元素的文档。...我们将在下面看一。 使用多个命名空间进行验证 命名空间允许您在同一文档中组合服务不同目的的元素,而无需担心重叠的名称。 注意 - 本节讨论的材料也适用于使用 SAX 解析器进行验证。

    6800

    XML文档节点导航与选择指南

    XPath(XML Path Language)是XSLT标准的主要组成部分。它用于XML文档中浏览元素和属性,提供了一种强大的定位和选择节点的方式。...XSLT的主要组成部分: XPath是XSLT(可扩展样式表语言转换)标准的主要组成部分,用于XML文档中选择和操作数据XPath路径表达式XPath使用路径表达式来选择XML文档中的节点节点集。...XPath用于XSLTXPath是XSLT标准的主要组成部分,它与XSLT一起用于XML文档进行转换和样式处理。...节点之间的关系XPath中,节点之间有不同的关系:父节点(Parent Node): 每个元素和属性都有一个父节点。子节点(Child Node): 元素节点可以有零、一个或多个节点。...选择多个路径通过XPath表达式中使用 | 运算符,您可以选择多个路径://book/title | //book/price:选择所有 book 元素的 title 和 price 元素

    10400

    xsl模版优先级

    xsl模版优先级 由 Ghostzhang 发表于 2007-05-12 22:29 当一个节点匹配在 XSLT 模板中建立的多个模式(也称为规则)时,处理器就会按照 XSLT 规范中描述的冲突解决指导原则来确定使用哪一个模式...然而,确定模板实际优先级的算法还需要附带解释一。 要确定哪个模板具有最高优先级,处理器首先会消除导入的所有模板(使用 xsl:import 元素);自动导入的模板比经过导入转换的模板优先级低。...这意味着具有多个定位步骤 (Location Step),或具有谓词的任何模式都会自动得到默认优先级 0.5。 仍然存在这样的情况:有多个具有相同优先级的模板匹配给定的节点。...例如,以下 XSLT 片段包含两个模板,它们可以匹配相同的 foo 元素(该元素具有一个 bar 子元素和一个 bar 父元素)。...由于两个模板的默认优先级都为 0.5,因此 XSLT 处理器要么产生出错信号,要么选择文档中的最后一个模板 — 本例中为匹配 bar/foo 元素的模板: <xsl:template match='foo

    1.4K30

    XPath语法_java中path的作用

    另外XPath2.0也是XSLT2.0和XQuery1.0的用于查询定位节点的主表达式语言。XQuery1.0是XPath2.0的扩展。...关于XSLT和XQuery中使用XPath表达式定位节点的知识在后面的实例中会有所介绍。...在学习XPath之前你应该XML的节点元素,属性,原子值(文本),处理指令,注释,根节点(文档节点),命名空间以及节点间的关系如:父(Parent),子(Children),兄弟(Sibling)...谓词可以是0个或多个多个多个谓词用逻辑操作符and, or连接。取逻辑非用not()函数。...特定元素 如sender:表示选择当前节点的sender节点集合,等同于(./sender) 注意:执行XPath时一定要注意上下文。即当前是在哪个节点执行XPath表达式。

    8.8K20

    添加和使用XSLT扩展函数

    这些方法中的每一个都接受单个参数,即包含由XSLT处理器发送的消息的字符串。这些方法不返回值。要在编译样式表时使用此错误处理程序,请创建子类的实例,并在编译样式表时参数列表中使用它。...若要在执行XSLT转换时使用此错误处理程序,请创建子类的实例,并在使用的Transform方法的参数列表中使用它。...中的evaluate函数对于XSLT1.0(Xalan处理器),只能在名称空间http://extension-functions.intersystems.com中使用evaluate函数默认情况(...样式表中,声明evaluate函数所属的命名空间,并根据需要使用evaluate函数。请参阅下一小节。执行XSLT转换时,创建子类的实例,并在使用的Transform方法的参数列表中使用它。...可以对同一函数进行任意数量的调用,但具有不同的参数和返回值。函数名和参数的每个组合都是求值缓存中的一个单独条目。可以使用%XML.XSLT2.Transformer中的方法来操作求值缓存。

    4.3K20

    Selenium系列5-XPath路径表达式

    Xpath介绍 XPath 使用路径表达式 XML 文档中进行导航 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。...这些函数用于字符串值、数值、日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。 XPath 是 XSLT 中的主要元素 XPath 是 XSLT 标准中的主要元素。...如果没有 XPath 方面的知识,就无法创建 XSLT 文档。 可以XSLT 教程》中阅读更多的内容。 XQuery 和 XPointer 均构建于 XPath 表达式之上。...Xpath术语 节点 XPath 中,有七种类型的节点元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。...Rowling 2005 29.99 子(Children) 元素节点可有零个、一个或多个子。

    2.2K20

    Spark 基础(一)

    因此,Transformations操作通常支持链式调用,可以同时应用多个不同的操作,并在计算的开销最小化批量处理和数据分片的访问。...执行Action操作期间,Spark会在所有Worker节点上同时运行相关计算任务,并考虑数据的分区、缓存等性能因素进行调度。...(func):与map类似,但每个输入项都可以映射到多个输出项,返回一个扁平化的新RDDunion(otherDataset):将一个RDD与另一个RDD进行合并,返回一个包含两个RDD元素的新RDDdistinct...(numTasks)):移除RDD中的重复项,返回包含不同元素的新RDDgroupByKey(numTasks):将RDD中有相同键的元素分组成一个迭代器序列,返回一个(key, iterable)的新...分组和聚合:可以使用groupBy()方法按照一个或多个列来对数据进行分组,使用agg()方法进行聚合操作(如求和、平均值、最大/最小值)。如df.groupBy("gender").count()。

    83940

    爬虫之Xpath详解

    XPath介绍 XPath 是一门 XML 文档中查找信息的语言。XPath 可用来 XML 文档中元素和属性进行遍历。...XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。...XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们常规的电脑文件系统中看到的表达式非常相似。 2. XPath 含有超过 100 个内建的函数。...XPath 被设计为供 XSLT、XPointer 以及其他 XML 解析软件使用。  XPath 术语 1.... XPath 中,有七种类型的节点元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。 2.

    1.4K20

    Python 爬虫网页内容提取工具xpath

    上一节,我们详述了lxml.html的各种操作,接下来我们熟练掌握一XPath,就可以熟练的提取网页内容了。 XPath 是什么?...它有4点特性: XPath 使用路径表达式 XML 文档中进行导航 XPath 包含一个标准函数库 XPath 是 XSLT 中的主要元素 XPath 是一个 W3C 标准 ?...子(Children) 每个元素节点可以有零个、一个或多个子。 比如,body有两个子:div,ul,而ul也有两个子:两个li。 同辈(Sibling) 同辈有相同的父辈节点。.../ 从根节点选取,路径中间时表示一级路径 // 从当前节点开始选择文档中的节点,可以是多级路径 . 从当前节点开始选取 .....从父节点开始选取 @ 按属性选取 接下来通过具体的示例来加深对路径表达的理解: 路径表达式 解释 /html/body/ul/li 从根节点开始依照路径选取li元素。返回多个

    3.2K10

    从一个范例看XML的应用

    意思就是说即便你添加了客户端的表单验证,仍然要在服务端客户端发来的数据进行验证。本文的例子中,我们接收的是一个XML字符串,那么如何进行验证呢?...VS2008中,有一个内置功能,可以由XML文档推断出它的模式,尽管推断出的模式往往不够精准,但我们可以对推断出的模式进行一些修改,大多数情况就可以得到我们想要的模式。...方法内部使用了一个XmlReader遍历了Xml文档,由于XmlReader设置了模式,所以遍历时会对每一个节点进行验证,当发现不符合模式要求的节点值时便会抛出异常,如果我们捕获到异常,就返回false...随后,我们需要以编程的方式这个XML进行XSLT转换,将其转换为预期的XHTML。...上面的XSLT将DataSet输出的XML转换成了一个HTML的Table标记。

    3K40

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

    在此类分组调度算法,即使存在待发送的分组,网络链路也可以处于空闲状态,即与每个活动元素关联的资格断言可能同时为假。...FIFO是最基本的调度原语,它仅按元素到达的顺序进行调度。结果,FIFO原语不能表达广泛的分组调度算法。...很容易看出这是不够的—如果我们通过增加完成时间来PIFO进行排序,那么如果某个任意元素元素之前变得合格,就会导致错误的调度顺序,并且如果我们通过增加开始时间来PIFO进行排序,如果多个元素同时变为合格...我们使用原型两级分层调度程序进行编程,其中第2级有10个节点,每个节点内有10个流,总共有100个流。我们FPGA上实现了数据包生成器(每个流一个),以模拟流。...然后,使用WF2Q +算法第2级的特定节点上公平分配速率限制值。图11中,我们采样了一个随机的2级节点,并显示PIEO调度程序非常准确地节点执行了速率限制。

    4.1K20

    4-SIII-Android数据固化之Xml的Dom解析和存储

    形如:xxx组成的闭合标签 安卓的res目录下的xml想必大家都是否熟悉,它们最终都是代码中被读取并解析发挥效果的 安卓的SharedPreferences是以Xml的形式存储数据的...; 应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点、属性等信息; 优点:XML节点的添加修改等,而且解析也很方便 缺点比较耗费内存,解析速度也不快 准备的待解析xml: <?...doc.createTextNode(weaponXml.getUser())); weapon.appendChild(user); } //为了得到xslt...引擎创建对象 TransformerFactory tff = TransformerFactory.newInstance(); //创建xslt引擎对象输出...); //获取属性对象 Properties pro = tf.getOutputProperties(); //设置编码格式和输出格式

    70220

    Web安全 | 带你了解一XML及其注入的相关知识

    当一标记之间没有任何文本内容时,可以不写结束标记,开始标记的末尾加上斜杠”/”来确认,例如: 这样的标记被称为“空标记”。...标记要正确嵌套 一个XML元素中允许包含其他XML元素,但这些元素之间必须满足嵌套性 有效使用属性 标记中可以包含任意多个属性。...DOCTYPE根元素名称 [元素声明]> DTD中定义属性: 外部实体声明:<!...XPath 用于 XML 文档中-通过元素和属性进行导航。类似jquery选择器的选择路径。 XPath的强大之处在于逻辑运算,使程序变得更有逻辑性,同时也会造成注入漏洞。...Import和Include import和include标签可以用来合并多个XSLT文档,但是只能在XSLT文档中间注入内容的话,也就不能直接使用XML外部实体(XXE)攻击或脚本来进行攻击了,因为这些攻击技术要求我们文档头部实现内容注入

    3.8K30

    计网复习提纲(文字版)

    接收方 收到了错的分组,就发送上一次正确收到分组的序号的ACK(期待0号元素,收到了1号元素就发送ACK1) 收到了分组就发送正确的ACK GBN 发送方 数据结构 滑动窗口 base:滑动窗口的第一个元素...序列号 报文段数据中第一个字节字节流中的编号 确认号 期待得到的下一个字节的seq 也就是说1-seq-1字节已经被确认,seq没有 超时设置 SampleRTT 报文段被发出到收到该报文段的确认之间的时间进行测量...结构 经内存交换 分组从输入端口拷贝到内存中再拷贝到输出端口中 经总线交换 一根共享总线来进行交换 经内联网络 输出端口 排队 当通过交换结构到达的分组速率超过了输出链路的速率时,需要对分组进行缓存...广播信道的特点 单个共享广播信道 两个或多个节点同时传输:相互干扰 碰撞:一个节点同时收到两个或多个信号 信道划分协议 将信道划分成小的“片”(时隙、频率、编码) 将“片”分配给节点使用 种类 TDMA...(移动主机)仅仅能够在其覆盖范围内向其他节点传送数据; 节点之间相互通信组成的临时网络:它们内部进行选路和地址分配。

    72020
    领券