繁体   English   中英

在Dataweave中合并xml响应和json响应的问题

[英]Issues in merging the xml response and json response in Dataweave

我有以下来自SOAP服务之一的xml响应:

 <?xml version="1.0" encoding="UTF-8"?> <idc:document DocUrl="//abc.com:443/images/ywnj/mdi5/~edisp/test.jpg" dDocFormats="image/jpeg" dDocName="Test1" dDocTitle="Test1.jpg" dID="603" dName="sysadmin" dStatus="RELEASED" dUser="anonymous" xmlns:idc="//www.stellent.com/IdcService/"> <idc:field name="encodeDocUrl"/> <idc:field name="localizedForResponse">1</idc:field> <idc:field name="hasAnnotations">0</idc:field> <idc:field name="hasStickyNotes">0</idc:field> <idc:field name="dSubscriptionID">Test1</idc:field> <idc:field name="idcToken"/> <idc:resultset TotalRows="2" name="manifest"> <idc:row> <idc:field name="extRenditionName">indexData</idc:field> </idc:row> <idc:row> <idc:field name="extRenditionName">48x48_GIF</idc:field> </idc:row> <idc:row> <idc:field name="extRenditionName">180x180_GIF</idc:field> </idc:row> </idc:resultset> </idc:document> <idc:document DocUrl="//abc.com:443/images/ywnj/mdi5/~edisp/test23.jpg" dDocFormats="image/jpeg" dDocName="Test23" dDocTitle="Test23.jpg" dID="603" dName="sysadmin" dStatus="RELEASED" dUser="anonymous" xmlns:idc="//www.stellent.com/IdcService/"> <idc:field name="encodeDocUrl"/> <idc:field name="localizedForResponse">1</idc:field> <idc:field name="hasAnnotations">0</idc:field> <idc:field name="hasStickyNotes">0</idc:field> <idc:field name="dSubscriptionID">Test23</idc:field> <idc:field name="idcToken"/> <idc:resultset TotalRows="2" name="manifest"> <idc:row> <idc:field name="extRenditionName">indexData</idc:field> </idc:row> <idc:row> <idc:field name="extRenditionName">90x90_GIF</idc:field> </idc:row> <idc:row> <idc:field name="extRenditionName">250x250_GIF</idc:field> </idc:row> </idc:resultset> </idc:document> 

而且我从另一个REST服务获得以下json响应:

 { "results": [ { "ID": "1", "ImageID": "2", "Name": "Test1", "Owner": "sysadmin", "Author": "sysadmin", "Creator": "sysadmin" }, { "ID": "2", "ImageID": "23", "Name": "Test23", "Owner": "sysadmin", "Author": "sysadmin", "Creator": "sysadmin" } ] } 

并且我想实现最终的json以下(仅当xml dDocName与JSON中的Name匹配时,才应映射来自soap响应的数据。)

 { "results": [ { "ID": "1", "ImageID": "2", "Name": "Test1", "Owner": "sysadmin", "Author": "sysadmin", "Creator": "sysadmin" "links": [ { "rel": "indexData", "href": "/abc/indexData" }, { "rel": "48x48_GIF", "href": "/abc/48x48_GIF" }, { "rel": "180x180_GIF", "href": "/abc/180x180_GIF" } ] }, { "ID": "2", "ImageID": "23", "Name": "Test23", "Owner": "sysadmin", "Author": "sysadmin", "Creator": "sysadmin" "links": [ { "rel": "indexData", "href": "/abc/indexData" }, { "rel": "90x90_GIF", "href": "/abc/90x90_GIF" }, { "rel": "250x250_GIF", "href": "/abc/250x250_GIF" } ] } ] } 

我尝试在dataweave中创建以下内容,但无法正常工作:

 %dw 1.0 %output application/json --- { "packshots": (payload.searchResults pluck ({ "ID": $.xAH_StoreItemNumber, "ImageID": $.dID, "Name": $.dDocName, "Owner": $.dDocOwner, "Author": $.dDocAuthor, "Creator": $.dDocCreator, "links": (flowVars.renditionResp."idc:document"."idc:resultset"."idc:row" (filter $.dDocName == flowVars.CurrentName) map { "rel":$."idc:field".@extRenditionName, "href": "/abc" ++ $."idc:field".@extRenditionName }) })) } 

您能帮我达到同样的效果吗!

谢谢 !!

我将假设您的XML具有一个名为idc:root的根标记。 我首先要做的是按idc:dDocName将XML分组。 这将允许您在需要时提取renditionResp变量的正确部分。

然后,脚本的其余部分将如下所示:

%dw 1.0
%output application/json

%var docs = flowVars.renditionResp."idc:root" groupBy $."idc:dDocName"
---
{
  "packshots": (payload.searchResults pluck ((value) -> {
    "ID":      value.xAH_StoreItemNumber,
    "ImageID": value.dID,
    "Name":    value.dDocName,
    "Owner":   value.dDocOwner,
    "Author":  value.dDocAuthor,
    "Creator": value.dDocCreator,
    "links":   docs[flowVars.CurrentName] map ((link) -> {
      "rel":  link."idc:field".@extRenditionName,
      "href": "/abc" ++ link."idc:field".@extRenditionName
    })
  })
}  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM