这是我的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>
尝试过多种情况,也使用了
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))}
}
出现错误,例如缺少
)
。通过在第一个循环中直接检查null条件进行了其他尝试,得到了诸如“无法将数组强制转换为 bool 值”之类的错误。请提出建议。谢谢。 最佳答案
你可以做
%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
}
})
}
}
DataWeave是“空安全”的,用于查询类似于
payload.Records.*RecordsEntries.*RecordEntry
中的值,但是尝试使用null进行操作(例如null map {}
)时将引发错误。default
运算符将其左侧的值(如果是null
)替换为右侧的值。另外,您还缺少
*
。每当您需要所有重复的元素都匹配时,就需要在xml中使用它。