Dataweave для выбора точного тега из XML Mulesoft - PullRequest
0 голосов
/ 10 июля 2020

Каким будет правильное выражение Dataweave, чтобы получить «0011x000014VegoAA C» из XML ниже?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<order order-no="00000907" xmlns="http://www.demandware.com/xml/impex/order/2006-10-31">
    <order-date>2020-07-10T08:57:05.076Z</order-date>
    <current-order-no>00000907</current-order-no>
    <product-lineitems>
        <product-lineitem>
            <net-price>54.17</net-price>
        </product-lineitem>
    </product-lineitems>
    <custom-attributes>
        <custom-attribute attribute-id="Adyen_pspReference">852594371442812G</custom-attribute>
        <custom-attribute attribute-id="Adyen_value">7099</custom-attribute>
        <custom-attribute attribute-id="sscAccountid">0011x000014VegoAAC</custom-attribute>
    </custom-attributes>
</order>

1 Ответ

0 голосов
/ 10 июля 2020

Пользовательский атрибут выглядит как стандартный тег. Оберните его в кавычки, и он будет работать нормально. custom-attribute - это массив, который обозначен звездочкой в ​​преобразовании DW. Из этого массива (строка 19 создает его) мы фильтруем все элементы с атрибутом (обозначенным символом @) равным sscAccountId.

Результат - массив с одним элементом.

%dw 2.0
var payload =read('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<order order-no="00000907" xmlns="http://www.demandware.com/xml/impex/order/2006-10-31">
    <order-date>2020-07-10T08:57:05.076Z</order-date>
    <current-order-no>00000907</current-order-no>
    <product-lineitems>
        <product-lineitem>
            <net-price>54.17</net-price>
        </product-lineitem>
    </product-lineitems>
    <custom-attributes>
        <custom-attribute attribute-id="Adyen_pspReference">852594371442812G</custom-attribute>
        <custom-attribute attribute-id="Adyen_value">7099</custom-attribute>
        <custom-attribute attribute-id="sscAccountid">0011x000014VegoAAC</custom-attribute>
    </custom-attributes>
</order>','application/xml')
output application/json
---
(payload.order."custom-attributes".*"custom-attribute") 
 filter (item) -> (item.@"attribute-id" ~= "sscAccountid")

введите описание изображения здесь

...