Как преобразовать массив в XML-объекты в DataWeave 1.0?

#dataweave

Вопрос:

Как я могу преобразовать следующий объект в XML?

 %dw 1.0 %output application/xml encoding="UTF-8", skipNullOn="everywhere" %namespace soap http://schemas.xmlsoap.org/soap/envelope/ --- soap#Body: {  Array: [  {  Item:"test 1"  },  {  Item:"test 2"  }  ] }  

Ожидаемый результат будет таким же, как у DataWeave 2.0

 lt;?xml version='1.0' encoding='UTF-8'?gt; lt;soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"gt;  lt;Arraygt;  lt;Itemgt;test 1lt;/Itemgt;  lt;/Arraygt;  lt;Arraygt;  lt;Itemgt;test 2lt;/Itemgt;  lt;/Arraygt; lt;/soap:Bodygt;  

Но в настоящее время вместо этого я получаю ошибку

 Message : Exception while executing:   Array: [  ^ Cannot coerce a :array to a :object.  

Ответ №1:

Это связано с тем, что DataWeave может преобразовывать объекты в XML-элементы, однако в XML нет понятия массива, поэтому он не работает. Вместо этого вам нужно преобразовать массив в объект. Я использовал функцию reduce (), объединив каждый объект элемента. Обратите внимание, что вы неправильно используете массив, поскольку хотите заключить каждый элемент в отдельный элемент массива.

 %dw 1.0 %output application/xml encoding="UTF-8", skipNullOn="everywhere" %namespace soap http://schemas.xmlsoap.org/soap/envelope/ --- {  soap#Body:   [  {  Item:"test 1"  },  {  Item:"test 2"  }  ] reduce ((item, accumulator={}) -gt; accumulator    { Array: item}) }