我从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
})
}))
}
您能帮我实现同样的目标吗!
谢谢!!
答案 0 :(得分:0)
我将假设您的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
})
})
}