在 dwl-Transform 消息中使用 xpath3

Using xpath3 in dwl-Transform Message

我想检查节点是否存在于 XML 负载中。为此,我想在 mule4 的 Transform Message 中使用 xpath3()。

输入:

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

数据编织代码:

%dw2.0
output application/json skipNullOn="everywhere"
---
if(xpath3('//:ABC',payload.XML,'BOOLEAN')
 "abc": "yes
else
 "abc": "no" 

预期输出( json):

{
"abc": "yes"
}

请帮我解决这个问题。

为什么要使用 xpath?您可以使用以下数据编织表达式获得相同的结果:

  1. 检查元素是否存在(是否为 nil)
%dw 2.0
output application/json skipNullOn="everywhere"
---
{
    "abc": if (payload.XML.ABC?) "yes" else "no"
}
  1. 检查元素是否存在而不是 nil(当 ABC 有值时 nil 必须设置为 false 或删除):
%dw 2.0
output application/json skipNullOn="everywhere"
---
{
    "abc": if (!isEmpty(payload.XML.ABC)) "yes" else "no"
}

使用这些表达式的输出示例:

DataWeave 2.x(在 Mule 4.x 中)没有 xpath3() 函数。如果出于某种原因您想在 DataWeave 中使用 XPATH,您将不得不自己开发该功能,但我建议您不要这样做。

推荐的方法是将其迁移到 DataWeave 表达式,如@olamiral 解决方案。