簡體   English   中英

Dataweave:根據以特定字符開頭的起始值過濾 XML 有效負載

[英]Dataweave: Filter XML payload based on staring value starting with specific character

我有一個輸入 XML,其中包含供應商列表和一些其他數據。 輸入 XML 如下所示:

             <screenFields>
                <ScreenFieldDTO>
                    <fieldName>SUPP1</fieldName>
                    <value>123</value>
                </ScreenFieldDTO>
                <ScreenFieldDTO>
                    <fieldName>MAKE1</fieldName>
                    <value>ABC</value>
                </ScreenFieldDTO>
                <ScreenFieldDTO>
                    <fieldName>SUPP2</fieldName>
                    <value>234</value>
                </ScreenFieldDTO>
                <ScreenFieldDTO>
                    <fieldName>NORM2</fieldName>
                    <value>TXT2</value>
                </ScreenFieldDTO>
                <ScreenFieldDTO>
                    <fieldName>SUPP3</fieldName>
                    <value>124</value>
                </ScreenFieldDTO>
                </screenFields>

我想過濾此 XML 以訪問以“SUPP”開頭的字段名稱的值。 我知道 dataweave 中的過濾器可以比較整個值,但我需要過濾包含特定字符串的字段名稱。

映射看起來像:

 %dw 2.0
 output application/json
 fun filterSupplier(val) = if(val startsWith("SUPP")) "SUPP" else ""
 ---
{
"fieldname": payload.screenFields.*ScreenFieldDTO filter $.fieldName == 
 (filterSupplier($.fieldName))
}

預期的響應是:

{
 [
  {"fieldname" : "SUPP1", "value": "123"},
  {"fieldname" : "SUPP2", "value": "234"},
  {"fieldname" : "SUPP3", "value": "124"}
 ]
}

響應是空白的。 這段代碼有什么問題?

您使用的腳本對於過濾器來說過於復雜。 filter()只需要一個返回 true 或 false 的表達式,因此簡單的filter ($.fieldName startsWith("SUPP"))將起作用並更清楚地表達意圖。

我假設預期的 output 是一個數組。 我還會添加一個 map 以將數組的每個元素中的鍵名稱更改為預期的 output 中的fieldname名稱。

%dw 2.0
output application/json
---
payload.screenFields.*ScreenFieldDTO 
    filter ($.fieldName startsWith("SUPP"))
    map {"fieldname": $.fieldName }

Output:

[
  {
    "fieldname": "SUPP1"
  },
  {
    "fieldname": "SUPP2"
  },
  {
    "fieldname": "SUPP3"
  }
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM