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

时间:2015-09-01 06:22:05

标签: mule mule-studio mule-component mule-el

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

输入xml:输入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>

任何人都可以帮我解决这个问题。提前致谢。

1 个答案:

答案 0 :(得分:2)

一种方法:

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

object内部,当您在返回array of key-value pairs的括号之间放置一个表达式时,它会被评估并用于填充object

请参阅https://developer.mulesoft.com/docs/dataweave

中的5.1.3. Dynamic elements部分