XSLT、XML:按属性值分组

2023-12-10

使用 XSLT 根据属性值对元素进行分组的最佳方法是什么? 使用 XSLT 2.0 或更高版本会更好吗?

非常感谢您的帮助

Thomas


原始 XML:

<transaction>    
  <record type="1" >
    <field number="1" >
        <item >223</item>
    </field>
  </record>

  <record type="14" >
    <field number="1" >
        <item >777</item>
    </field>
  </record>

  <record type="14" >
    <field number="1" >
        <item >555</item>
    </field>
  </record>      
</transaction>

分组后结果:

<transaction>
  <records type="1" >
      <record type="1" >
        <field number="1" >
            <item >223</item>
        </field>
      </record>
  </records>

  <records type="14" >
      <record type="14" >
        <field number="1" >
            <item >777</item>
        </field>
      </record>

      <record type="14" >
        <field number="1" >
            <item >555</item>
        </field>
      </record>
  </records>
</transaction>

在 XSLT 2.0 中,您可以使用xsl:for-each-group,但如果你打算这样做<xsl:for-each-group select="record" group-by="@type">那么你必须位于transaction记录当时的情况。

此外,您还需要利用current-group得到所有的record组内的元素。

试试这个 XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="xml" indent="yes" />

<xsl:template match="transaction"> 
    <xsl:copy>
        <xsl:for-each-group select="record" group-by="@type"> 
            <records type="{current-grouping-key()}" >
                <xsl:apply-templates select="current-group()" />
            </records>
        </xsl:for-each-group>
    </xsl:copy>
</xsl:template> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
        <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSLT、XML:按属性值分组 的相关文章

随机推荐

  • 如何在Python中删除诅咒窗口并恢复背景窗口?

    我正在研究 pythoncurses 并且我有一个带有 initscr 的初始窗口 然后我创建了几个新窗口来重叠它 我想知道是否可以删除这些窗口并恢复标准屏幕而无需重新填充它 有办法吗 有人能告诉我窗口 子窗口 垫和子垫之间的区别吗 我有这
  • 轮廓未绘制指定数量的轮廓

    我在循环中生成一些数据 并喜欢将它们绘制为等高线图 每个图应使用相同的颜色图和指定数量的等高线级别 另外 第一级颜色应该是白色 以下代码片段生成的图类似于我目前面临的问题 import numpy as np import matplotl
  • 如何通过使用 pycryptodome 的 pyinstaller 构建可执行文件?

    我正在尝试构建以下使用的脚本密码球 based on this example http www codekoala com posts aes encryption python using pycrypto comment 259217
  • Azure 迁移网站主机名

    我正在尝试在不同的订阅中设置辅助 Azure 网站 为新站点位置创建自定义主机名时 我被迫验证主机名 Azure 抱怨主机名是根据不同的 CNAME 注册的 并阻止我添加它 这是事实 但我不在乎 我希望将其从旧网站切换到 DNS 记录传播时
  • 必须声明一个主体,因为它没有标记为抽象或外部? C#/ASP.NET

    我有一个带有代码隐藏的普通 Web 表单 在这个代码隐藏中 我可以实例化根文件夹中的几个类 例如 public partial class Default System Web UI Page Helper helper new Helpe
  • 如何向 JTabbedPane 选项卡添加关闭按钮?

    我正在使用 JTabbedPane 我需要在选项卡中添加一个关闭按钮来关闭当前选项卡 我一直在搜索 据我了解 我必须从 JPanel 扩展并添加关闭按钮 正如他们所说here但是 有没有办法添加扩展 JTabbedPane 的关闭按钮 或者
  • WriteStream 无法在 Delta 表中写入数据

    我正在尝试使用以下代码从流路径连接 Streaming Json 文件 Schema1 customerId STRING orderId STRING products ARRAY
  • 正在寻找“分词器”、“解析器”和“词法分析器”的明确定义以及它们如何相互关联和使用?

    我正在寻找 分词器 解析器 和 词法分析器 的明确定义以及它们如何相互关联 例如 解析器是否使用分词器 反之亦然 我需要创建一个程序将通过 c h 源文件来提取数据声明和定义 我一直在寻找示例并且可以找到一些信息 但我真的很难掌握语法规则
  • Java:按指定的角度值围绕另一个点旋转点

    我试图将 java 中的 2D 点围绕另一个具有指定度数值的点旋转 在本例中只是围绕点 0 0 旋转 90 度 Method public void rotateAround Point center double angle x cent
  • Android 中的 GSON/Jackson

    我能够使用 JSONObject 和 JSONArray 成功解析 Android 中的以下 JSON 字符串 没有成功地使用 GSON 或 Jackson 获得相同的结果 有人可以帮助我使用包括 POJO 定义的代码片段来使用 GSON
  • 如何将 mutate 与具有多个参数的自定义函数一起使用

    我在 jared mamrot 的帮助下创建了这个自定义函数制作 dplyr 过程的自定义函数 它基本上采用一个数据框 一列和一个数字作为参数 并用 NA 替换该列中定义的值的百分比 y my func lt function df x y
  • Redis GET 与 SQL SELECT

    我对 NoSQL 还很陌生 但我一直很喜欢它的想法 我看了一下Redis 并提出了一些有关存储和接收多个的最佳方式的问题hashes 假设以下场景 Store a list of objects redis Hashes and selec
  • 解析 iOS 推送通知

    我已经完成了 Push 的事情解析网 一切正常 然后我被要求为公司创建一个解析帐户并进行设置 以便他们可以自己管理 好吧 没有意识到网站上有一个导出按钮 我删除了我帐户上的应用程序 并为他们创建了一个帐户 并将应用程序添加到他们的帐户中 我
  • .NET 反射:如何获取部分类上定义的属性

    我使用 NET 实体框架 我想将属性从一个 EntityObject 复制到另一个 但 System Type GetProperties 似乎没有返回分部类上定义的属性 Code 在 Visual Studio 生成的 XXX edmx
  • 使用 mysql 选择前 N 个*组*

    为了简单起见 假设我有一个包含 2 个字段的表 PERSON NAME 和 COMPANY ID 以及这些对 a 1 b 1 c 2 d 2 e 3 PERSON NAME a 和 b 在 COMPANY ID 1 工作 依此类推 我想选择
  • 将产品附加字段添加到 WooCommerce 上的特定产品

    我需要更改代码 以便不在我的所有 WooCommerce 产品上显示文本区域 但只有 2 个 这是在我的 WordPress 子主题上functions php file 我已将 product id 更改为 product id 2130
  • XSLT 为同一 XSL 的同一输入 XML 获取两个不同的输出

    我一直在在线工具中尝试我的 XSLT 代码 XSLT 1 0 处理器 http www freeformatter com xsl transformer html 最近 我不得不利用xs dateTime因此开始使用使用的工具XSLT 2
  • iOS CoreBluetooth 未扫描 iPad Air 中的服务

    我正在开发一个连接到 BLE 外设并从中接收数据的应用程序 它扫描外围设备 找到外围设备 发现服务 如果找到正确的服务 它就会接收数据 它在 iPhone 5 上运行良好 但当我在 iPad Air 上运行它时 它可以连接 但没有发现任何服
  • 防止网站上的暴力登录

    作为对最近的回应推特劫持 and Jeff 关于字典攻击的帖子 保护您的网站免受暴力登录攻击的最佳方法是什么 Jeff 的帖子建议为每次尝试登录增加延迟 并且评论中的建议是在第二次失败的尝试后添加验证码 这两个看起来都是好主意 但是你怎么知
  • XSLT、XML:按属性值分组

    使用 XSLT 根据属性值对元素进行分组的最佳方法是什么 使用 XSLT 2 0 或更高版本会更好吗 非常感谢您的帮助 Thomas 原始 XML