xml - Mulesoft DataWeave 2.0 - 有条件地更改单个嵌套值

标签 xml dataweave mulesoft

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/

相关文章:

xml - XSLT - 合并 2 个没有通用 ID 的 XML 文件

dataweave - 如何检查可变长度字符串数组的任何一个元素是否存在于另一个可变长度字符串数组中

java - 仅当某个值出现两次时才从 CSV 中获取最新行

dataweave - 在dataweave中将时区从未定义更改为utc

java - 如何从 Mule 4 中的文件中读取 JSON 字符串

java - XPathFactory 不工作

xml - JAXB 绑定(bind)更改 xs :date to xs:dateTime?

c# - 根据我的 C# 类生成 xml 文件

java - mule4/java 将 Sql ddl 模式转换为 json 模式

dataweave - 如何使用 Dataweave 2.0 聚合这些数据?