1

如何访问主体和/或避免 mule 数据编织中 xml 节点中的 NULL 值错误。

考虑这是我的节点:

<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 节点没有收到正文。我尝试使用默认值[],但它不起作用。我怎样才能确保它总是收到一个身体?

4

2 回答 2

0

我找到了一种处理空节点的方法,我们可以使用过滤器来跳过空节点,

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

使用这个我们控制空或非空标签进入转换。

于 2015-11-05T12:23:26.860 回答
0

您在 DataWeave 脚本中使用的 XML 示例不完整且有效,缺少和 upc 值等。

您的解决方案可能类似于检查节点的 sizeOf,如果它是 0,则用空格填充它,如果不执行您的正常脚本。

如果您有完整的示例会有所帮助。

于 2015-10-24T19:20:42.997 回答