我想遍历下面的标签:
<pur:Schedule>
<pur:StatusNumber>1</pur:StatusNumber>
<pur:RequestDate>2023-02-22</pur:RequestDate>
<pur:Action>CHANGE</pur:Action>
</pur:Schedule>
我想在Mode等于CHANGE时填充上面的标签,否则如果Mode等于CANCEL跳过整个标签。
输入负载
{"Order": {
"Reason": "apple",
"Line": [
{
"Quantity": 30,
"Date": "2023-02-22","Pricing": {
"Amount": "11.34"},"Details": {
"Number": "247"}},
{
"Quantity": 12,
"Date": "2023-02-25","Pricing": {
"Amount": "11.34"},"Details": {
"Number": "247"}},
{
"Quantity": 0,
"Date": "2023-02-21","Pricing": {
"Amount": "11.34"},"Details": {
"Number": "247"}}
]}}
使用的 Dataweave 脚本
%dw 2.0
output text/xml writeDeclaration=false
ns typ http://xmlns.oracle.com/apps/prc/po/editDocument/order/types/
ns pur http://xmlns.oracle.com/apps/prc/po/editDocument/order/
---
{typ#Product: {
typ#Entry: {
pur#OrderId: payload.Order.Line.Details.Number[0],
pur#OrderDescription: payload.Order.Reason,pur#EntryLine: payload.Order.Line map {
pur#productNumber: $.Details.Line_Number,
pur#Qty: $.Ordered_Quantity,
pur#unit: $.Pricing.Amount ,
pur#status: if($.Quantity != 0) "Changed" else "",
pur#Mode: if($.Quantity == 0) "CANCEL" else "CHANGE",pur#Reason: if($.Quantity == 0) "Cancelled" else "",
(pur#Schedule: {
pur#StatusNumber: "1",
pur#RequestDate: $.Date,
pur#Action: "CHANGE"})
}}}}
预期产出
<typ:Product xmlns:typ="http://xmlns.oracle.com/apps/prc/po/editDocument/order/types/">
<typ:Entry>
<pur:OrderId xmlns:pur="http://xmlns.oracle.com/apps/prc/po/editDocument/order/">247</pur:OrderId>
<pur:OrderDescription xmlns:pur="http://xmlns.oracle.com/apps/prc/po/editDocument/order/">apple</pur:OrderDescription>
<pur:EntryLine xmlns:pur="http://xmlns.oracle.com/apps/prc/po/editDocument/order/">
<pur:productNumber/>
<pur:Qty/>
<pur:unit>11.34</pur:unit>
<pur:status>Changed</pur:status>
<pur:Mode>CHANGE</pur:Mode>
<pur:Reason/>
<pur:Schedule>
<pur:StatusNumber>1</pur:StatusNumber>
<pur:RequestDate>2023-02-22</pur:RequestDate>
<pur:Action>CHANGE</pur:Action>
</pur:Schedule>
</pur:EntryLine>
<pur:EntryLine xmlns:pur="http://xmlns.oracle.com/apps/prc/po/editDocument/order/">
<pur:productNumber/>
<pur:Qty/>
<pur:unit>11.34</pur:unit>
<pur:status>Changed</pur:status>
<pur:Mode>CHANGE</pur:Mode>
<pur:Reason/>
<pur:Schedule>
<pur:StatusNumber>1</pur:StatusNumber>
<pur:RequestDate>2023-02-25</pur:RequestDate>
<pur:Action>CHANGE</pur:Action>
</pur:Schedule>
</pur:EntryLine>
<pur:EntryLine xmlns:pur="http://xmlns.oracle.com/apps/prc/po/editDocument/order/">
<pur:productNumber/>
<pur:Qty/>
<pur:unit>11.34</pur:unit>
<pur:status/>
<pur:Mode>CANCEL</pur:Mode>
<pur:Reason>Cancelled</pur:Reason>
</pur:EntryLine>
</typ:Entry>
</typ:Product>
您可以将条件添加到生成该密钥的脚本部分。请注意,脚本的输出不能用作脚本的一部分。避免这种表达问题的方式。而是考虑输入如何产生输出。我重用了生成元素
Mode
.的条件
(
pur#Schedule: {
pur#StatusNumber: "1",
pur#RequestDate: $.Date,
pur#Action: "CHANGE"
}
) if ($.Quantity != 0)