【问题标题】:How to handle For each condition in Data weaver: Mule如何处理 Data weaver 中的每个条件:Mule
【发布时间】:2015-09-01 21:15:07
【问题描述】:

我在循环数据编织器中的条目时遇到了困难。以下是输入和预期响应。 不知道如何制作循环(我需要获取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>

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

【问题讨论】:

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


    【解决方案1】:

    一种方法:

    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部分

    【讨论】:

    • 请注意这里的关键是在返回所需集合的表达式上使用 map 函数。在这个例子中,它是 payload.Records.RecordsEntries.*RecordEntry .
    • 完美!!工作正常。尝试了多种方法,但没有尝试使用括号。谢谢你的详细信息!
    猜你喜欢
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    相关资源
    最近更新 更多