2016-04-13 4 views
0

Ich habe eine Anforderung abrufenRequired abhängig von der Kategorie aus der folgenden Eingabe und listet alle wiederholten Elemente.Mule Dataweave: Verwenden, wenn und Karte

<root> 
    <Unspecified> 
     <Category>T03</Category> 
     <AmountRequired>993</AmountRequired> 
     <ExcessAmount>250</ExcessAmount> 
     <Currency>GBP</Currency> 
     <ExchangeRate>1</ExchangeRate> 
    </Unspecified> 
    <Unspecified> 
     <Category>T03</Category> 
     <AmountRequired>9903</AmountRequired> 
     <ExcessAmount>250</ExcessAmount> 
     <Currency>GBP</Currency> 
     <ExchangeRate>1</ExchangeRate> 
    </Unspecified> 
    <Unspecified> 
     <Category>P02</Category> 
     <AmountRequired>992</AmountRequired> 
     <Currency>GBP</Currency> 
     <ExchangeRate>1</ExchangeRate> 
    </Unspecified> 
    <Unspecified> 
     <Category>A29</Category> 
     <AmountRequired>929</AmountRequired> 
     <Currency>GBP</Currency> 
     <ExchangeRate>1</ExchangeRate> 
    </Unspecified> 
</root> 

Ich möchte den out Put wie unten erhalten. Wenn es 2 Tags von T03 gibt, sollten die beiden Beträge wie unten angezeigt werden. Auch wenn eine Kategorie nicht existiert, ist es zum Beispiel nicht P05, und wenn wir die Transformation dafür haben, dann wird P05 nicht existieren, also gibt es eine Möglichkeit, den Fehler zu umgehen, selbst wenn die Eingabe-XML nicht existiert enthält nicht die Kategorie P05?

<amountRequired> 
     <amount>929</amount> 
     <currency>GBP</currency> 
     <exchangeRate>1</exchangeRate> 
     <amountInSystemCurrency>550</amountInSystemCurrency> 
    </amountRequired> 
<amountRequired> 
    <amount>993</amount> 
    <currency></currency> 
    <exchangeRate></exchangeRate> 
    <amountInSystemCurrency></amountInSystemCurrency> 
</amountRequired> 
<amountRequired> 
    <amount>9903</amount> 
    <currency></currency> 
    <exchangeRate></exchangeRate> 
    <amountInSystemCurrency></amountInSystemCurrency> 
</amountRequired> 
<amountRequired> 
     <amount>992</amount> 
     <currency></currency> 
     <exchangeRate></exchangeRate> 
     <amountInSystemCurrency></amountInSystemCurrency> 
    </amountRequired> 

schätzen Hilfe mit der

Antwort

0

Sie unter Code verwenden können -

%dw 1.0 
%output application/xml 
--- 
using (T03=payload.root.*Unspecified filter ($.Category == 'T03')){ 
    //http://stackoverflow.com/questions/36598550/mule-dataweave-using-when-and-map 
    amountRequired:{ 
    amount:T03.AmountRequired[0] default 0, 
    currency:"", 
    exchangeRate:"", 
    amountInSystemCurrency:"" 
} 
} 

eine Variable T03 verwendet die T03 Kategorie Artikel von der ursprünglichen Nutzlast gefiltert zu halten. amount: T03.AmountRequired[0] default 0 wird ausgegeben Menge von T03, wenn vorhanden, sonst Standard 0.

In Kommentare zu dieser Antwort scheinen Sie die Anforderung :) geändert haben. Wie auch immer, bearbeite diese Antwort für folgenden Kommentar: "
Ich habe die Frage bearbeitet, hoffe, dass es Sinn macht. Ich möchte alle Tags ausgeben (Hinweis: T03 wird wiederholt und möchte beide ausgeben) - Neil24 vor 13 Minuten "

%dw 1.0 
%output application/xml 
--- 
{ 
    root : { (payload.root.*Unspecified map 
     amountRequired: { 
      amount:$.AmountRequired unless $.Category != 'T03' otherwise 0, 
      currency:"", 
      exchangeRate:"", 
      amountInSystemCurrency:"" 
     } 
    )} 
} 

Dies ist sehr geradlinig Transformation und Betragsfeld ist 0, wenn die aktuelle Kategorie ist T03. In der ursprünglichen Frage hatten Sie erwähnt, dass Sie nur dann einen Betrag benötigen, wenn es eine T03-Kategorie ist, es sei denn, es sei denn, ansonsten, wenn Sie wollen, Betrag für jede Kategorie, entfernen Sie es einfach.

Hoffnung, die hilft!

+0

Vielen Dank für Ihre Hilfe, vielen Dank! – Neil24

+0

Sie sind willkommen, vergessen Sie nicht, die Antwort zu akzeptieren, wenn es Ihr Problem gelöst hat :) –

+0

Danke, ich bin neu zu verwenden stackoverflow, ich bin mir nicht sicher, wo ich die Antwort annehmen muss. – Neil24

Verwandte Themen