如何遍历XML属性并更新指定节点值?DataWeave代码求助
修正DataWeave代码实现XML特定节点值替换
输入XML示例
<Root> <ReferenceNums> <Reference type="shiprefnum">原参考编号</Reference> <Reference type="orderref">ORD-12345</Reference> </ReferenceNums> <AdditionalInfo> <Detail>示例内容</Detail> </AdditionalInfo> </Root>
期望输出XML示例
<Root> <ReferenceNums> <Reference type="shiprefnum">124215133_AB_00010</Reference> <Reference type="orderref">ORD-12345</Reference> </ReferenceNums> <AdditionalInfo> <Detail>示例内容</Detail> </AdditionalInfo> </Root>
正确DataWeave代码(Mule 4+)
使用update操作符的简洁实现:
%dw 2.0 output application/xml --- payload update { // 定位到所有ReferenceNums下的Reference节点 case targetRef at .ReferenceNums.Reference // 判断节点的type属性是否为shiprefnum when targetRef.@type == "shiprefnum" -> // 替换节点的文本值,保留原有属性 targetRef update { case value at $ -> "124215133_AB_00010" } }
也可以用mapObject遍历实现(适合复杂层级场景):
%dw 2.0 output application/xml --- payload mapObject (nodeVal, nodeKey) -> if (nodeKey == "ReferenceNums") // 遍历ReferenceNums下的所有子节点 nodeVal mapObject (refVal, refKey) -> if (refKey == "Reference" and refVal.@type == "shiprefnum") // 替换目标节点值,保留原有属性 { Reference @(refVal.@): "124215133_AB_00010" } else // 保留其他节点不变 { (refKey): refVal } else // 保留其他顶层节点不变 { (nodeKey): nodeVal }
常见问题排查
- 节点路径错误:确认XML层级是否和代码中的
.ReferenceNums.Reference一致,比如如果ReferenceNums嵌套在其他节点下,需要补全路径(如.ParentNode.ReferenceNums.Reference)。 - 属性判断遗漏:如果代码没加
targetRef.@type == "shiprefnum"的判断,会替换所有Reference节点的值。 - 丢失节点属性:替换时如果直接写
{ Reference: "新值" }会丢失原有type属性,必须用@(refVal.@)继承所有原有属性。
内容的提问来源于stack exchange,提问作者user12277274
相关产品推荐
相关产品推荐

