#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}) }