XML 中的状态在转发之前需要更改。如果 RESPONSE.OUTBOUND.STATUS 等于“ERR”,则需要改为“FAILURE”。 STATUS 可能包含的其他消息必须保持原样。
处理前的示例 XML:
<?xml version="1.0" encoding="UTF-8"?>
<RESPONSE>
<ID>9497585</ID>
<DATE>2020-10-01</DATE>
<TIME>18:38:04</TIME>
<OUTBOUND>
<CODE>921</CODE>
<STATUS>ERR</STATUS>
<DESC>Manufacturing flaw</DESC>
</OUTBOUND>
<ORIGIN>
<METHOD>POST</METHOD>
<STATUS>200 OK</STATUS>
<CLIENTID>29834</CLIENTID>
<DIAG>330</DIAG>
<NOTES>XRAY revealed air pockets.</NOTES>
</ORIGIN>
</RESPONSE>
数据编织:
%dw 2.0
output application/xml
---
payload
- "RESPONSE" ++
{ "RESPONSE" :
(payload.RESPONSE - "OUTBOUND") ++
{ "OUTBOUND" :
(payload.RESPONSE.OUTBOUND - "STATUS") ++
{"STATUS" :
if (payload.RESPONSE.OUTBOUND.STATUS == "ERR")
"FAILURE"
else
payload.RESPONSE.OUTBOUND.STATUS
}
}
}
这是输出:
<?xml version='1.0' encoding='UTF-8'?>
<RESPONSE>
<ID>9497585</ID>
<DATE>2020-10-01</DATE>
<TIME>18:38:04</TIME>
<ORIGIN>
<METHOD>POST</METHOD>
<STATUS>OK</STATUS>
<CLIENTID>29834</CLIENTID>
<DIAG>330</DIAG>
<NOTES>XRAY revealed air pockets.</NOTES>
</ORIGIN>
<OUTBOUND>
<CODE>921</CODE>
<DESC>Manufacturing flaw</DESC>
<STATUS>FAILURE</STATUS>
</OUTBOUND>
</RESPONSE>
这在某种程度上是可行的,但要更改单个值,似乎不必要地复杂。这就像因为找不到手术刀而使用大锤一样。有没有更简单的方法来访问节点并更改它?
此外,XML 还依赖于节点顺序。通过删除然后重新插入子节点,我最终更改了节点的顺序(“OUTBOUND”现在位于“ORIGIN”之后)。这可能会在未来造成悲伤。
最佳答案
最简单的方法是使用更新
运算符
%dw 2.0
output application/xml
---
payload update {
case status at .RESPONSE.OUTBOUND.STATUS if(status == "ERR") -> "FAILURE"
}
简单明了;)
关于xml - Mulesoft DataWeave 2.0 - 有条件地更改单个嵌套值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64519611/