Обработка узлов NULL xml в Dataweave

Как я могу получить доступ к телу и/или избежать ошибки значений NULL в узлах xml в переплетении данных мула.

Считайте, что это мой узел:

<catalog>
    <product product-id="D158413" mode="delete"/>
    <product product-id="556204380">
    <ean>5014414203648</ean>
    <display-name>Double duvet cover</display-name>
    <long-description>Line</long-description>
    <online-flag>true</online-flag>
    <available-flag>true</available-flag>
    <searchable-flag>true</searchable-flag>
    <tax-class-id>default</tax-class-id>
    <brand>Linea</brand>
    <manufacturer-name>Linea</manufacturer-name>
    <custom-attributes>
        <custom-attribute attribute-id="Care Instructions">Machine</custom-attribute>
        <custom-attribute attribute-id="Colour">Pink</custom-attribute>
        <custom-attribute attribute-id="Finish">Plain</custom-attribute>
        <custom-attribute attribute-id="Guarantee">N/A</custom-attribute>
    </product>  
</catalog>

Мой код Dataweave:

%dw 1.0
%input payload application/xml
%output application/java 
---
(payload.catalog.*product default []) map  {
    CatalogDetails:{
            CatalogId:payload.catalog.@catalog-id
    },
    ProdDetails:{
                product-id:$.@product-id,
                mode:$.@mode,
                ean:$.ean,
                upc:$.upc,
                min-order-quantity:$.min-order-quantity,    
                display-name:$.display-name,
                short-description:$.short-description
    },
CustValues: { (
            ($.custom-attributes.*custom-attribute default []) map {      
                (sellByUnitVal: $)  when ($.@attribute-id) == "sellByUnit" ,
                (VOLUMEVal: $) when ($.@attribute-id) == "VOLUME",
                (UnitMeasureVal: $) when ($.@attribute-id) == "UnitMeasure"
             } 
        ) }
   }

Первый узел Product не получает тело. Я пытался использовать [] по умолчанию, но это не работает. Как я могу убедиться, что он всегда получает тело?


person Rohan Shinde    schedule 05.10.2015    source источник
comment
Разве это не третий продукт, который является нулевым? Можете ли вы показать нам код, который вы используете для чтения узлов xml?   -  person StillLearnin    schedule 05.10.2015
comment
Я поделился своим примером кода. Пожалуйста, посмотрите   -  person Rohan Shinde    schedule 05.10.2015


Ответы (2)


Ваш пример XML не является полным и недействительным, отсутствуют значения и значения upc и т. д., которые вы используете в своем сценарии DataWeave.

Ваше решение, вероятно, похоже на проверку размера узла, и если он равен 0, заполните его пробелом, если не выполните свой обычный скрипт.

Если у вас есть полные примеры, это поможет.

person JoostD    schedule 24.10.2015
comment
XML правильный. Некоторые узлы могут войти во входящий XML, а могут и нет. поэтому я также должен создать сопоставление для этих элементов. Узел продукта повторяется во входном xml. Для демонстрации я добавил только 2 продукта - person Rohan Shinde; 26.10.2015

Я нашел один способ обработки пустых узлов, так как мы можем использовать фильтр, чтобы пропустить пустые узлы,

(payload.catalog.*product default []) filter ($ !='') map { }

Используя это, мы контролируем пустые или непустые теги в преобразовании.

person Rohan Shinde    schedule 05.11.2015