XSLT 将字段连接在一起

2023-12-04

我正在尝试过滤特定字段并连接另一个字段:

Input:

<?xml version="1.0" encoding="UTF-8"?>
<payloads>
    <payload>
        <firstname>michael</firstname>
        <secondname>brown</secondname>
        <number>1</number>
    </payload>
    <payload>
        <firstname>michael</firstname>
        <secondname>brown</secondname>
        <number>2</number>
    </payload>
    <payload>
        <firstname>michael</firstname>
        <secondname>brown</secondname>
        <number>3</number>
    </payload>
</payloads>

Output:

<?xml version="1.0" encoding="UTF-8"?>
<payloads>
    <payload>
        <firstname>michael</firstname>
        <secondname>brown</secondname>
        <number>1,2,3</number>
    </payload>
</payloads>

我知道我需要循环遍历每个有效负载标签,但目前我无法正确输出它。目前我有这个:

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

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="payloads">
        <xsl:copy>
            <xsl:for-each select="payload">
                <payload>
                    <xsl:value-of select="firstname"/>
                    <xsl:value-of select="secondname"/>
                    <xsl:value-of select="number"/>
                </payload>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

使用这个模板:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:key name="k" match="payload" use="concat(firstname, '|', secondname)"/>

    <xsl:template match="payload[generate-id() = 
                  generate-id(key('k', concat(firstname, '|', secondname)))]">
        <xsl:copy>
            <xsl:copy-of select="firstname"/>
            <xsl:copy-of select="secondname"/>
            <number>
                <xsl:for-each select="key('k', concat(firstname, '|', secondname))">
                    <xsl:value-of select="number"/>

                    <xsl:if test="position() != last()">
                        <xsl:text>,</xsl:text>
                    </xsl:if>
                </xsl:for-each>
            </number>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="payload"/>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

当应用于提供的输入 XML 时,它会输出想要的正确结果:

<payloads>
  <payload>
    <firstname>michael</firstname>
    <secondname>brown</secondname>
    <number>1,2,3</number>
  </payload>
</payloads>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSLT 将字段连接在一起 的相关文章

随机推荐

  • 是否可以从静态 HTML 表单向 ASP.NET 执行跨页面 POST?

    我正在尝试创建一个静态 HTML 页面 其中包含
  • 如何从 Process.Start 中分离 exe

    在 CodedUI 测试中 我使用System Diagnostics Process Process Start exePath 执行 exe 文件 现在我的问题是 执行测试后我的应用程序关闭 WPF 前端 我的问题是 我将如何获得我刚刚
  • 如何使用 json API 通过 flutter 在列表视图中创建网格视图

    我想创建一个购物车应用程序 我遇到了问题 如何使用 JSON API 通过 flutter 在 ListView 中创建 GridView 我想要它就像这个例子一样 https i stack imgur com 2KQFG png htt
  • 以编程方式连接到配对的蓝牙设备

    有没有办法使用 Android SDK 以编程方式连接到已配对的蓝牙设备 换句话说 我可以进入 设置 gt 无线和网络 gt 蓝牙设置 然后点击设备 列为 已配对但未连接 此时它将连接 我希望能够以编程方式执行此操作 但没有找到一种方法来执
  • JPA/Hibernate 最大连接数?

    JPA Hibernate 查询中允许的联接数量是否有限制 自从休眠以来不会自动加入 我必须在 JPA Hibernate 查询中显式指定联接 例如 人有地址 地址有州 以下查询检索地址和状态已完全加载的人员 select p a s fr
  • 仅在 Woocommerce 中提供第二件商品的数量折扣

    我想为所有产品实现全球折扣 但仅限第二个产品项目 我是什么意思 如果顾客购买 夹克 则不享受折扣 客户购买了两件 夹克 产品 第二件 夹克 可享受 20 的折扣 客户购买了五件 夹克 产品 第二件 夹克 仍然只有20 的折扣 它应该适用于所
  • C# 如何通过编号分隔字符串 (1. 2. ...)

    我有这个字符串 1 This 2 Is 3 A 4 Test 并且想根据编号将其拆分 如下所示 1 这个 2 Is 3 A 4 测试 我认为这应该可以通过正则表达式实现 但不幸的是我对此不太了解 This string result Reg
  • StreamReader Read 方法未读取指定的字符数

    我必须解析一个大文件 所以不要这样做 string unparsedFile myStreamReader ReadToEnd takes 4 seconds parse unparsedFile takes another 4 secon
  • PHP 分页使用 glob 检索图像

    我正在尝试使用 glob 从文件夹中检索图像 并且希望对其进行分页 以便每页仅显示 3 个图像 通过在互联网和 S O 上进行挖掘我有下面的代码 问题是它只从目录中提取三个图像 当我单击下一页时 它会显示相同的 3 个图像 使用 glob
  • 类数据类型的 EasyMock 匹配器

    我对这个和 easymock 的语法做了噩梦 public void foo Class String class getClass 然而 当我拨打 foo String class 时 我得到 java lang IllegalState
  • Google表格公式:单元格范围内的子字符串求和

    我有两列 Col A Col B 01 02 2020 17 03 11 2020 24 03 11 2020 12 我尝试根据 A 列的子字符串对 B 列求和 如下所示 SUMIF A A MID A A 4 2 02 B B SUMIF
  • 如何使用时区格式化 url 日期时间参数

    我到处寻找但找不到答案 我想了解格式化日期时间 带时区 url 参数的方式 情况如下 调用程序具有带有 UTC 时区的 DateTime 值 接收器 Json WebAPI C 正在我的具有中央时区的本地电脑上运行 PoCreationDa
  • jMeter 中的 javax.net.ssl.SSLException

    我正在服务器上测试一些功能 直到昨天为止都运行良好 今天 他们已经启用了 ssl 到服务器 即从 http 到 https 现在 当我运行测试计划时 出现以下错误 我该如何解决这个问题 尽管我在请求中将协议值更改为 https 但我收到以下
  • SSL 证书未安装

    我在 IIS 中安装 SSL 证书时遇到问题 以下是从 CA 获取证书之前的步骤 使用 OpenSSL 生成私钥文件 openssl genrsa out key name key 2048 命令 生成的 csr 文件包含 openssl
  • 如何在 Windows 窗体中为标签添加边框?

    我正在尝试创建一个内部带有白色标签的表单 当我单击某些内容时 表单将消失并仅显示标签 到目前为止 我尝试将 TransparencyKey 放在 Lime 上 当我单击某些内容时 我将 BackColor 更改为 Lime 并将 FormB
  • Live555框架生成错误

    我正在尝试构建框架Live555图书馆 我从以下位置获取了库文件here按照这个SO的回答我已多次尝试根据该答案生成它 它只是给出以下错误 Applications Xcode app Contents Developer Platform
  • Spring Cloud Dataflow 类型转换在处理器组件中不起作用?

    我有一个可以转换的处理器byte 有效负载进入MyClass有效负载 Slf4j EnableBinding Processor class public class MyDecoder ServiceActivator inputChan
  • 如果 Observable 已完成,我是否需要取消订阅 Observable?

    假设我有一个Observable 热门 未完成 我订阅了它 通常当我完成时Subscription我必须取消订阅它以防止内存泄漏 let subject new Subject const sub subject subscribe Nee
  • 如何将 ObservableCollection 绑定到 WPF 中的复选框列表框

    让我先声明一下我对 C 和 WPF 都很陌生 我正在尝试连接一个集合Boolean值到包含 6 个复选框的容器 并在按下按钮时存储这些值的状态 我假设有一种简单的方法可以做到这一点 因为将复选框绑定到集合似乎是一件非常自然的事情 但到目前为
  • XSLT 将字段连接在一起

    我正在尝试过滤特定字段并连接另一个字段 Input