Dataweave Mulesoft Пропустить теги XML

Я использую dataweave для преобразования файла CSV в файл XML. В некоторых местах для определенного тега xml нет значения, и я получаю пустой тег.

Я хочу, чтобы в случае отсутствия значения этот тег вообще не присутствовал в xml.

Это длинное сопоставление, поэтому я не хочу писать все сопоставление в теге when else, а просто отображать для этого тега в условии when else.

Отображение данных

    name: ((payload01.name) when payload01.name != ""
    otherwise {}),

Вывод: если на входе есть значение для имени

    <name>Kittu</name>

Иначе

    <name/> 

Я хочу, чтобы в противном случае теги не появлялись вообще.

Любая помощь приветствуется. Спасибо.


person Kittu    schedule 21.06.2016    source источник


Ответы (8)


"имя:" должно быть внутри круглых скобок, например:

(name: (payload01.name) when payload01.name != ""
         otherwise {})
person Victor P.    schedule 21.06.2016

Используйте skipNullOn = "везде" в объявлении вывода, чтобы не объявлять его для всех элементов.

%output application/xml skipNullOn="everywhere"

Ссылка: https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation#output-directive.

Если вам нужно, чтобы присутствовали пустые теги, тогда нам придется использовать иначе, как показано ниже:

name: payload01.name when ((payload01.name != null) and (payload01.name != "" )) otherwise "",

другой способ сделать это - указать значение по умолчанию, которое является самым простым:

name: payload01.name default "",
person tortoise    schedule 21.06.2016

Согласитесь с Виктором П, "имя:" должно быть внутри скобок. Однако для получения того же результата вы можете использовать следующий фрагмент.

(name: payload01.name) when payload01.name != ""

Хотя без в противном случае он создаст имя, если только поле payload01.name не будет пустым.

person sulthony h    schedule 19.07.2016

Используйте skipNullOn = "attributes" в объявлении вывода, чтобы не объявлять его для всех элементов.

% output application / xml skipNullOn = "атрибуты"

person Sanjay    schedule 01.08.2016

Для добавления пустой вкладки в муле это должно быть более подходящим. name: payload.name по умолчанию {}

это будет производиться, если имя не имеет значения.

person Alex Fernandez    schedule 29.03.2017

skipNullOn проверяет, присутствуют ли элементы или атрибуты. например Если элемент name отсутствует в вашем вводе, он не будет отображать его на выходе.

Чтобы проверить, пусто ли значение, вам нужно будет использовать такое условие: (name: payload01.name) when payload01.name! = ""

person Swati Deshpande    schedule 31.03.2017

Если вы используете skipNullOn = "везде", в поле вывода будет тег, даже если он не имеет значения. Так что в этом случае это не сработает. Попробуйте написать отдельную функцию для проверки и пропуска нулевых значений для всего тега.

person Kiruthika S    schedule 04.07.2017

Вы можете поставить галочку, как показано ниже, для отправки тегов xml:

*(Contact: {
                mobNo: payload.moNo,
                countryCode: payload.countryCode
            }
) when payload != null and paylaod.mobNo != null*

Как указано выше, весь тег Cntact войдет в запрос только в том случае, если в полезной нагрузке присутствует действительный mobNo.

person Rahul Virani    schedule 04.06.2018