Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在Mule 4中将SQL Server SELECT转换为XML?_Sql Server_Xml_Mule_Dataweave_Mulesoft - Fatal编程技术网

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

Sql server 如何在Mule 4中将SQL Server SELECT转换为XML?,sql-server,xml,mule,dataweave,mulesoft,Sql Server,Xml,Mule,Dataweave,Mulesoft,如何在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.SchoolRef

如何在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  steven@gmail.com    prm
7FDF722B-6BBA-4BF0-8205-A5380B269EF1    1   SA              Steve's School  test@gmail.com      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">steven@gmail.com</ns0:Email>
    <ns0:Email Type="sec">test@gmail.com</ns0:Email>
  </ns0:SchoolEmailList>
</ns0:SchoolInfo>
谢谢,
史蒂夫

只是对我上述评论的跟进。整个解决方案都是通过T-SQL实现的

SQL

输出


只是对我上面的评论的一个跟进。整个解决方案都是通过T-SQL实现的

SQL

输出


以下是将生成相同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和StateProvinceId始终相同

关于减少的解释: 详细解释了reduce及其理论基础。还有一个。最后一页很好地解释了reduce

现在用我自己的话说,reduce接受一个数组和一个lambda函数作为输入

数组包含的元素reduce将以与map函数类似的方式迭代。map和reduce函数之间的相似之处到此结束:

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

一旦完成对数组的迭代,reduce的结果就是累加器

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

/*
 * 1st iteration: (e=steven@gmail.com, acc={}) -> acc + {Email: steven@gmail.com}
 * 2nd iteration: (e=test@gmail.com, acc={Email: steven@gmail.com} -> acc + {Email: test@gmail.com}
 * result: acc = {Email: steven@gmail.com, Email: test@gmail.com}
 */

以下是将生成相同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和StateProvinceId始终相同

关于减少的解释: 详细解释了reduce及其理论基础。还有一个。最后一页很好地解释了reduce

现在用我自己的话说,reduce接受一个数组和一个lambda函数作为输入

数组包含的元素reduce将以与map函数类似的方式迭代。map和reduce函数之间的相似之处到此结束:

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

一旦完成对数组的迭代,reduce的结果就是累加器

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

/*
 * 1st iteration: (e=steven@gmail.com, acc={}) -> acc + {Email: steven@gmail.com}
 * 2nd iteration: (e=test@gmail.com, acc={Email: steven@gmail.com} -> acc + {Email: test@gmail.com}
 * result: acc = {Email: steven@gmail.com, Email: test@gmail.com}
 */

如果可以修改SQL语句,则可以通过T-SQL直接生成此类XML。您的SQL Server版本是什么?如果可以修改SQL语句,则可以通过T-SQL直接生成此类XML。你的SQL Server版本是什么?你能解释一下reduce函数和你的空数组吗?我将添加reduce的扩展作为答案的一部分。谢谢George,很好的解释-我仍然在想函数。MuleSoft专门为DW提供了培训:你能解释一下reduce函数和你的空数组吗?我将添加reduce的扩展作为答案的一部分。谢谢George,很好的解释-我仍然在了解功能。MuleSoft专门为DW提供培训: