如何在Dataweave 2中移除XML输出中的空标签
DataWeave 2 跳过生成空XML元素的解决方案
你遇到的问题根源是:原有写法中ns0#Accounting_Worktag_Reference这个元素键始终存在,仅值为null。DataWeave序列化XML时,部分版本会将值为null的元素键生成为自闭合空标签,skipNullOn="everywhere"仅对属性、子元素级别的null值生效,对顶层元素键的null值处理存在例外。
可通过以下几种方案解决:
方案1:使用动态条件键(兼容性最好,最稳妥)
仅当PROJECT字段有效时才生成该元素,无效时整个键不纳入输出,从根源避免空标签生成:
%dw 2.0 %output application/xml ns ns0 http://替换为你实际的ns0命名空间地址 --- { # 其他原有字段保持不变 (ns0#Accounting_Worktag_Reference: { ns0#ID @(ns0#"type": "Project_ID"): payload01.PROJECT }) if (payload01.PROJECT? and payload01.PROJECT != "") # 其他原有字段保持不变 }
方案2:补全输出配置参数
如果希望沿用原有写法,可在输出指令中新增writeEmptyElements="false"参数,配合skipNullOn使用:
%dw 2.0 %output application/xml skipNullOn="everywhere" writeEmptyElements="false" ns ns0 http://替换为你实际的ns0命名空间地址 --- { ns0#Accounting_Worktag_Reference: if (payload01.PROJECT != null and payload01.PROJECT != ""){ ns0#ID @(ns0#"type": "Project_ID"): payload01.PROJECT } else null }
方案3:全局过滤空值元素
如果存在大量同类需要过滤的空元素,可在输出前对整个对象做过滤,统一删除值为null或空对象的键:
%dw 2.0 %output application/xml skipNullOn="everywhere" ns ns0 http://替换为你实际的ns0命名空间地址 --- // 生成完整对象后过滤空值键 { ns0#Accounting_Worktag_Reference: if (payload01.PROJECT != null and payload01.PROJECT != ""){ ns0#ID @(ns0#"type": "Project_ID"): payload01.PROJECT } else null // 其他原有字段 } filterObject ((value, key) -> value != null and value != {})
内容的提问来源于stack exchange,提问作者hpandalai
相关产品推荐
相关产品推荐

