2015-10-05 5 views
1

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

Рассмотрим это мой узел:

<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:[email protected] 
    }, 
    ProdDetails:{ 
       product-id:[email protected], 
       mode:[email protected], 
       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 ([email protected]) == "sellByUnit" , 
       (VOLUMEVal: $) when ([email protected]) == "VOLUME", 
       (UnitMeasureVal: $) when ([email protected]) == "UnitMeasure" 
      } 
     ) } 
    } 

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

+1

Разве это не третий продукт, который является нулевым? Можете ли вы показать нам код, который вы используете для чтения узлов xml? – StillLearnin

+0

Я поделился своим примером кода. Пожалуйста, посмотрите –

ответ

0

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

Ваше решение, вероятно, что-то вроде проверки sizeOf узла, и если это 0, заполните его op пробелом, если не выполните свой обычный скрипт.

Если у вас есть ваши полные примеры, которые помогут.

+0

xml правильно .. некоторые узлы могут войти в входящий XML или не могут. поэтому я также должен создавать сопоставление для этих элементов. Узел продукта повторяется во входном файле xml. Для демонстрационной цели я добавил только 2 продукта –

0

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

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

С помощью этого мы контролируем пустые или непустые тег в преобразование.