DataWeave读取带命名空间XML:标签存在性判断输出布尔值问题
解决带命名空间XML的DataWeave节点存在性判断问题
问题根源
你写的代码失效,是因为XML根节点<ns01:active>属于指定命名空间http://Atlas.Schemas.Policy/1.0,直接用payload.active无法识别带命名空间限定的节点,导致判断逻辑永远走else分支。
解决方案一:声明命名空间后访问(推荐)
通过ns关键字提前声明命名空间,再用前缀#节点名的格式访问带命名空间的节点:
%dw 2.0 output application/json ns ns01 http://Atlas.Schemas.Policy/1.0 --- if(payload.ns01#active.Id.groupId != null) "true" else "false"
解决方案二:直接指定命名空间属性访问
无需提前声明命名空间,直接通过节点的命名空间属性定位目标节点:
%dw 2.0 output application/json --- if(payload["active" @(namespace: "http://Atlas.Schemas.Policy/1.0")].Id.groupId != null) "true" else "false"
更简洁的写法:使用exists()函数
利用DataWeave内置的exists()函数直接判断节点是否存在,再转为字符串输出:
%dw 2.0 output application/json ns ns01 http://Atlas.Schemas.Policy/1.0 --- exists(payload.ns01#active.Id.groupId) as String
内容的提问来源于stack exchange,提问作者Zak01
相关产品推荐
相关产品推荐

