我有来自其中一个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匹配时,才应该映射来自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
})
}))
}
你能帮我实现同样的目标吗?!
谢谢!!
发布于 2018-08-28 21:04:54
我将在假设您的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
})
})
} https://stackoverflow.com/questions/52030642
复制相似问题