如何在Data weaver中检查null条件:Mule

sta*_*tar 4 mule mule-studio mule-el mule-component

这是我的xml,首先我需要检查'RecordsEntries'不应该是'null',然后RecordEntry不应该null跟随映射代码

<?xml version="1.0" encoding="UTF-8"?>
<Records>
  <storenumber />
  <calculated>false</calculated>
  <subTotal>12</subTotal>
 <RecordsEntries>
   <RecordEntry>
     <deliverycharge>30.0</deliverycharge>
     <entryNumber>8</entryNumber>
     <Value>true</Value>
  </RecordEntry>
  <RecordEntry>
    <deliverycharge>20.0</deliverycharge>
    <entryNumber>7</entryNumber>
    <Value>false</Value>
  </RecordEntry>
</RecordsEntries>
 <RecordsEntries>
    <RecordEntry>
      <deliverycharge>30.0</deliverycharge>
      <entryNumber>8</entryNumber>
      <Value>false</Value>
    </RecordEntry>
 </RecordsEntries>
</Records>
Run Code Online (Sandbox Code Playgroud)

尝试多个场景也使用when条件检查,但某处缺少括号或正确的格式

    orders: {
    order: {
  StoreID: payload.Records.storenumber,
  Total: payload.Records.calculated,
 (( payload.Records.RecordsEntries.*RecordEntry ) map {
    IndividualEntry: {
    Number:$.entryNumber,
    DeliverCharge:$.deliverycharge
    }
  } when ( payload.Records.RecordsEntries != null and payload.Records.RecordsEntries.*RecordEntry !=null))}
}
Run Code Online (Sandbox Code Playgroud)

像失踪一样得到错误).通过在第一个循环内直接检查null条件来尝试其他方式得到了错误,例如"无法将数组强制转换为布尔值".请建议.谢谢.

Sho*_*oki 6

你可以这样做

%dw 1.0
%output application/xml
---
orders: {
  order: {
  StoreID: payload.Records.storenumber,
  Total: payload.calculated,
 ((payload.Records.*RecordsEntries.*RecordEntry default []) map {
      IndividualEntry: {
        Number:$.entryNumber,
        DeliverCharge:$.deliverycharge
      }
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

DataWeave是用于查询像in的值的"null-safe" payload.Records.*RecordsEntries.*RecordEntry,但是当尝试使用null(例如null map {})操作时会抛出错误.

default操作者更换的价值在它的左边,如果是null,与右边的一个.

你也错过了*.只要你想要匹配的所有重复元素,你需要在xml中使用它.