Warm tip: This article is reproduced from serverfault.com, please click

mule-覆盖skipNullOn =“无处不在”

(mule - override skipNullOn="everywhere")

发布于 2020-10-25 18:47:14

我已将dataweave脚本划分为模块,并且已skipNullOn="everywhere"在主dwl中使用过,因此将跳过所有模块中的所有null值。但是,我不想跳过特定模块的空值。如何为该特定模块覆盖(空化)skipNullOn =“ everywhere”。

输入:

<XML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ABC xsi:nil="true"/>
    <DEF/>
</XML>

数据编织代码:

%dw2.0
output application/json skipNullOn="everywhere"
---
payload.XML

预期输出(json):

{
"ABC": ""
}

获取输出(json):

{

}
Questioner
Amer Sufi
Viewed
0
TheOtherGuy 2020-12-01 13:24:06

由于我回答得很晚,因此不确定是否对你有很大帮助。无论如何,你可以在属性文件中以逗号分隔的格式获取要跳过“ skipNullOn”检查的节点列表。然后尝试类似下面的操作,这将帮助你遍历所有节点,然后根据需要实现输出:

%dw 2.0
output application/json skipNullOn="everywhere"
var toSkipNullOn='ABC,XYZ'

fun checkNull(key,val) = if((toSkipNullOn splitBy(',')) contains(key as String)) ''  else null
---
payload.XML mapObject (v0, k0, i0) -> 
{
    (k0):checkNull(k0,v0) 
}

在此示例中,我已将节点名称(ABC,XYZ)硬编码为变量toSkipNullOn。取而代之的是,你必须从属性文件中读取它,p('key-name')并将其分配给SkipNullOn。在此处输入图片说明