如何在 Mule 4 中将 SQL Server SELECT 转换为 XML?

2023-11-30

如何使用 Mule 4 中的 Dataweave 将以下 SQL 输出转换为 XML?

SELECT s.RefId
          ,s.LocalId
          ,s.StateProvinceId
          ,s.SchoolName
          ,e.Email
          ,e.EmailType
      FROM SchoolInfo s
      LEFT OUTER JOIN SchoolEmail e
      ON    e.SchoolRefId = s.RefId
      WHERE s.RefId = :ref_id

SQL 中的输出是:

RefId                               LocalId StateProvinceId SchoolName      Email               Type
7FDF722B-6BBA-4BF0-8205-A5380B269EF1    1   SA              Steve's School  [email protected]    prm
7FDF722B-6BBA-4BF0-8205-A5380B269EF1    1   SA              Steve's School  [email protected]      sec

XML 输出应如下所示:

<ns0:SchoolInfo xmlns:ns0="http://www.sifassociation.org/datamodel/au/3.4" RefId="7FDF722B-6BBA-4BF0-8205-A5380B269EF1">
  <ns0:LocalId>1</ns0:LocalId>
  <ns0:StateProvinceId>SA</ns0:StateProvinceId>
  <ns0:SchoolName>Steve's School</ns0:SchoolName>
  <ns0:SchoolEmailList>
    <ns0:Email Type="prm">[email protected]</ns0:Email>
    <ns0:Email Type="sec">[email protected]</ns0:Email>
  </ns0:SchoolEmailList>
</ns0:SchoolInfo>

谢谢, 史蒂夫


以下是将生成相同 XML 的 DW 表达式:

%dw 2.0
output application/xml
ns ns0 http://www.sifassociation.org/datamodel/au/3.4
var rId = payload[0].RefId
var lId = payload[0].LocalId
var sId = payload[0].StateProvinceId
---
ns0#SchoolInfo @(RefId: rId): {
    ns0#LocalId: lId,
    ns0#StateProvinceId: sId,
    ns0#SchoolEmailList: payload reduce (e,acc={}) -> acc ++ {
        ns0#Email @(Type: e.Type): e.Email
    }   
} 

我假设RefId, LocalId, and StateProvinceId每个查询总是相同的。

的解释reduce: reduce已解释here详细介绍了其理论基础。这里还有reduce的 MuleSoft 文档页面。最后一页很好地解释了reduce

现在用我自己的话来说,reduce将 (1) 一个数组和 (2) 一个 lambda 函数作为输入。

数组包含元素reduce将以类似的方式迭代map函数确实如此。之间的相似之处map and reduce功能到此结束:)。

lambda 函数需要两个参数:(1) 从数组中迭代的当前元素和 (2) 累加器。累加器可以初始化为一个值(我将其设置为一个对象{}在您的用例中,因为 XML 不喜欢数组)。第一次迭代的 lambda 函数的结果被设置为下一次迭代的累加器,依此类推。

的结果reduce是数组迭代完成后的累加器。

因此,如果我要追踪这个特定的reduce它看起来像这样,我简化了这些值的表示:

/*
 * 1st iteration: ([email protected], acc={}) -> acc + {Email: [email protected]}
 * 2nd iteration: ([email protected], acc={Email: [email protected]} -> acc + {Email: [email protected]}
 * result: acc = {Email: [email protected], Email: [email protected]}
 */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Mule 4 中将 SQL Server SELECT 转换为 XML? 的相关文章

随机推荐

  • 在 Outlook 中粘贴表格之前写入 - Excel VBA

    我使用以下代码将表格粘贴到 Outlook 上的新电子邮件中 Copy range of interest Dim r As Range Set r Range B2 D5 r Copy Open a new mail item Dim o
  • 选项卡中的图标未显示

    我从 Android 开始 当我尝试使用图标和文本制作 TabHost 时 只有文本可见 如果我将文本保留为空白 则可以看到图标 我想在屏幕上看到两者 有人可以给我建议吗 public void onCreate Bundle savedI
  • 替换除最后一个字符之外的所有字符

    假设我有一串a b c d 如何编写一个方法将该字符串转换为abc d 或者有没有可用的实现方法 到目前为止我已经尝试过的 int dotPlacing propertyName lastIndexOf 12 String modStrin
  • Databricks 上的 Shap 值绘图错误,但在本地工作

    我想做一个简单的形状分析并绘制 shap force plot 我注意到它在 ipynb 文件中本地工作没有任何问题 但在 Databricks 上失败并显示以下错误消息 Visualization omitted Javascript l
  • 如何在 Google appengine 中加密 ZipOutputStream?

    我正在使用 Java 在 GAE 中创建 zip 文件 并使用 ZipOutputStream 将它们上传到 Google Cloud Storage 但是我需要加密文件 但我不知道如何加密 有谁知道如何在 Google Appengine
  • Firefox 处理 xxx.submit(),Safari 不处理...可以做什么?

    当用户从菜单中选择 释放鼠标 选项之一时 我试图使下拉菜单发布表单 此代码在 FF 中运行良好 但 Safari 由于某种原因不提交表单 我使用 jquery 重新编写了代码 以查看 jquery 的 submit 实现是否可以更好地处理浏
  • C# Alpha Blend 透明 PictureBox

    我的表单上显示了一个网络摄像头提要 并且想在其上绘图 我本来打算使用图片框来完成此操作 但我发现 PictureBox 不支持真正的透明度 而只支持其所在表单的颜色 它也不支持字母混合 这就是我希望它显示的方式 类似于表单的显示方式 有谁知
  • CLLocationManager requestWhenInUseAuthorization() 不起作用

    我尝试在我的 iOS 应用程序中使用位置服务 但出于某种原因requestWhenInUseAuthorization不管用 当用户第一次使用该应用程序时 会像平常一样出现提示请求权限 但当您第二次打开该应用程序时 由于某种原因didCha
  • 如何在“绑定时”获取 ListBox 中项目的 ListBoxItem

    我有一个带有 Foo 对象的 ListBox 并且根据一些事件我禁用 启用 ListBox 中的 ListBoxItems 使用 ListBox Items 属性 我找到 Foo 对象 根据我的理解 我需要使用以下函数来获取 Foo 的 L
  • excel vba插入带格式的行

    我有一个宏 它根据 Excel 2007 中的用户输入插入多行 一切正常 但我仍然有一个小问题 我想复制上面行的完整格式 它仅适用于行中的某些单元格 这是插入代码 Rows B B Insert Shift xlDown CopyOrigi
  • MySQL 中的“REPLACE”和“INSERT ... ON DUPLICATE KEY UPDATE”之间有什么实际区别?

    我需要的是使用特定键设置记录的所有字段的值 该键实际上是复合键 如果还没有具有该键的记录 则插入该记录 REPLACE似乎是为了完成这项工作 但同时它的手册页表明INSERT ON DUPLICATE KEY UPDATE 我应该更好地选择
  • 使用 pythoncurses 逐页或逐行滚动

    我正在尝试使用 pythoncurses 在窗口中写入一些文本 但是当我到达窗口的尽头时我得到了addstr returned ERR 如何逐页或逐行滚动输出 如何绑定空格键或向下箭头 这是我的代码 try screen curses in
  • ITuner::put_TuneRequest() 调用被忽略

    我有一个带有 Microsoft DVBT Network Provider AVerMedia BDA DVBT Tuner AVerMEdia BDA Digital Capture Sample Grabber 和 NULL Rend
  • 如何覆盖每个环境的 Symfony2 语义配置?

    参数 yml time limit 8 my ui yml my ui time limit time limit 配置 yml imports resource my ui yml 然后我可以通过我的包中的扩展和配置类在我的控制器中访问这
  • 确保用户制作的 HTML 模板安全

    我希望允许用户创建微小的模板 然后我使用预定义的上下文在 Django 中呈现这些模板 我假设 Django 渲染是安全的 我问了一个关于这个的问题before 但仍然存在跨站点脚本的风险 我想防止这种情况发生 这些模板的主要要求之一是用户
  • 切换 MSB 的最佳方法是什么?

    所以我想切换我的数字的最高有效位 这是一个例子 x 100101 then answer should be 00101 我有一台 64 位机器 因此我不希望答案是100000 lt 51 0 s gt 100101我想到的一种方法是计算我
  • Visual Studio FsUnit 测试设置 - 异常 NUnit.Engine.NUnitEngineException

    我使用的是 Visual Studio 2013 安装了 FsUnit 2 2 0 它需要 NUnit 3 2 1 和 FSharpCore 3 1 我创建了一个单独的测试项目 并在其中放置了一个测试装置和测试 我的平台是 x64 Win
  • Windows 下的 Unix tail 和 grep 等效项

    我们有以下 unix 命令 usr bin tail n 1 path grep silent F message rm f path This usr bin tail n 1 path 获取文件中的最后一行path变量指的是 grep
  • 数字的大小(在内存中)是多少?

    JavaScript 中数字的大小是多少 例如 我知道C中的单个字符是1个字节 int 的大小是sizeof int int64 t 的大小是 64 位 依此类推 JavaScript 中数字 十进制 浮点数 的大小是多少 以及如何找到它
  • 如何在 Mule 4 中将 SQL Server SELECT 转换为 XML?

    如何使用 Mule 4 中的 Dataweave 将以下 SQL 输出转换为 XML SELECT s RefId s LocalId s StateProvinceId s SchoolName e Email e EmailType F