如何处理 Data weaver 中的每个条件:Mule

How to handle For each condition in Data weaver: Mule

我在循环数据编织器中的条目时遇到困难。下面是输入和预期的响应。 不确定如何进行循环(我需要获取 RecordEntry 并且每个条目都带有 'IndividualEntry')。

Input xml : input xml 中的记录条目标记是 3,但我可能会得到很多。所以需要使循环成为动态的。

<?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>
    <RecordEntry>
      <deliverycharge>1.0</deliverycharge>
      <entryNumber>6</entryNumber>
      <Value>false</Value>
    </RecordEntry>
  </RecordsEntries>
</Records>

预期响应(我期待以下响应)

<?xml version="1.0" encoding="UTF-8"?>
<orders>
  <order>
    <StoreID />
    <Total>false</Total>
    <IndividualEntry>
      <Number>8</Number>
      <DeliverCharge>30.0</DeliverCharge>
    </IndividualEntry>
    <IndividualEntry>
      <Number>7</Number>
      <DeliverCharge>20.0</DeliverCharge>
    </IndividualEntry>
    <IndividualEntry>
      <Number>6</Number>
      <DeliverCharge>1.0</DeliverCharge>
    </IndividualEntry>
  </order>
</orders>

我的数据编织器转换如下

%dw 1.0
%output application/xml
---
{ 
  orders: {
    order: {
      StoreID:payload.Records.storenumber,
      Total: payload.Records.calculated,
      IndividualEntry: payload.Records.RecordsEntries.*RecordEntry map {
        Number:$.entryNumber,
        DeliverCharge:$.deliverycharge
      }
    }
  }
}

目前我收到如下回复(我不知道如何将每个记录条目作为 IndividualEntry 标签,而且这里 element 标签是额外添加的,这不是在我的情况下需要)

<?xml version="1.0" encoding="UTF-8"?>
<orders>
  <order>
    <StoreID />
    <Total>false</Total>
    <IndividualEntry>
      <element>
        <Number>8</Number>
        <DeliverCharge>30.0</DeliverCharge>
      </element>
      <element>
        <Number>7</Number>
        <DeliverCharge>20.0</DeliverCharge>
      </element>
      <element>
        <Number>6</Number>
        <DeliverCharge>1.0</DeliverCharge>
      </element>
    </IndividualEntry>
  </order>
</orders>

谁能帮我解决这个问题。提前致谢。

一种方法:

orders: {
  order: {
      StoreID: payload.Records.storenumber,
      Total: payload.Records.calculated,
      (payload.Records.RecordsEntries.*RecordEntry map {
        IndividualEntry: {
        Number:$.entryNumber,
        DeliverCharge:$.deliverycharge
        }
      })
  }
}

object 中,当您将表达式放在 returns 和 array of key-value pairs 的括号之间时,它会被计算并用于填充 object.

参见https://developer.mulesoft.com/docs/dataweave

中的5.1.3. Dynamic elements部分