DataWeave 2.0如何按属性名称提取指定XML元素的取值
DataWeave 2.0 提取指定属性XML元素值方案
实现核心逻辑:DataWeave 中解析XML后,元素的属性通过@符号访问,遍历所有Property节点后筛选符合name属性要求的NameValue元素,直接读取元素值即可得到对应文本内容。
最简实现代码
%dw 2.0 output application/json --- // 直接筛选匹配目标属性的元素取值 payload.root.UserArea.PropertyList.*Property .NameValue[?($.@name == "xxx.UDFCHAR10")][0]
代码说明:
*Property:获取PropertyList下所有Property节点,返回数组格式[?($.@name == "xxx.UDFCHAR10")]:过滤器语法,遍历所有NameValue元素,匹配name属性为目标值的节点- 末尾
[0]:取第一个匹配到的结果,避免返回数组,若存在多个匹配项可删除该后缀获取全部符合条件的值 - 上述代码直接返回结果为
"ABC",符合需求
可复用封装方案
如果需要频繁提取这类自定义字段,可封装为通用函数:
%dw 2.0 output application/json // 定义通用提取函数,入参为PropertyList节点、目标name属性值 fun getUDFValue(propList, udfName) = propList.*Property.NameValue[?($.@name == udfName)][0] default "无匹配结果" --- // 调用函数取值 getUDFValue(payload.root.UserArea.PropertyList, "xxx.UDFCHAR10")
说明:追加default语法可以处理匹配不到值的场景,避免返回null。
内容的提问来源于stack exchange,提问作者user1905307
相关产品推荐
相关产品推荐

