Преобразование XML со значениями по умолчанию в Mulesoft

Предполагая, что у меня есть XML, например

    <a>
     <b>Some Value</b>
    </a>

    ...or...
    <a>
     <b type=1 />
    </a>

    ...or... 
    <a/>

и хотите, чтобы в выводе были определены некоторые значения и атрибуты, например

    <a>
     <b type=0>Some Value</b>
    </a>

    ...or...
    <a>
     <b type=1>Empty</b>
    </a>

    ...or... 
     <a>
     <b type=0>Empty</b>
    </a>

как лучше всего сделать это в Mulesoft?

Используя скрипт с такими строками, как

if (payload.a == null ) payload.a={}
if (payload['a']['b']) payload['a']['b']={}
if (payload.a.b.type == null) payload.a.b.type=0;

или dataweave

%dw 1.0
%output application/xml
---
{
   a: payload.a default { {b:{ b@type=0 }} }
}

Я сбит с толку здесь синтаксисом.


person Alex    schedule 15.02.2017    source источник


Ответы (1)


Если я правильно понимаю, о чем вы спрашиваете, похоже, работает следующее:

ввод:

<?xml version='1.0' encoding='UTF-8'?>
<root>
   <a>
     <b>Some Value</b>
    </a>
    <a>
     <b type="1" />
    </a>
    <a/>
</root>

Dataweave:

%dw 1.0
%output application/xml
---
root: payload.root.*a mapObject (
    a: {
        b @(type: $.b.@type default "0"): 
            $.b when $.b != null and $.b != "" otherwise "Empty"
    }
)

вывод:

<?xml version='1.0' encoding='UTF-8'?>
<root>
  <a>
    <b type="0">Some Value</b>
  </a>
  <a>
    <b type="1">Empty</b>
  </a>
  <a>
    <b type="0">Empty</b>
  </a>
</root>
person Brad Cooper    schedule 16.02.2017
comment
Да, вроде как ... Спасибо за синтаксис - он должен работать ... для этой чрезвычайно простой структуры. Искал совет, как сделать это просто. Представьте себе настоящий xml с сотнями полей ... Если никто не предложит лучше, я приму ваш ответ позже ... - person Alex; 16.02.2017