2015-09-01 18 views
1

我在循環數據編織器中的條目方面掙扎不已。以下是輸入和預期響應。 不知道如何使循環(我需要得到RecordEntry和每個條目與'IndividualEntry')。如何處理數據編織器中的每個條件:Mule

輸入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> 

任何人都可以幫助我解決這個問題。提前致謝。

回答

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

+1

見部分5.1.3. Dynamic elements請注意,這裏的關鍵是使用地圖功能上返回所需收集的表達式。在這個例子中,它是payload.Records.RecordsEntries。* RecordEntry。 –

+0

完美!工作正常。嘗試了很多事情,但還沒有嘗試過使用括號。謝謝你的細節! – star

相關問題