0

我试图通过检查变量的 null 并在结果中设置来实现一个简单的循环。

我的骡流部分如下所示。

数据库(选择)-> 转换消息(DataWeave- 转换为 xml)

数据库的价值如下:

Book1 Book2 Book3 Book4 Book5
abc   cde   fgh   ijk   lmn
opq   rst   NULL  NULL  NULL

Dataweaver 代码如下所示:

ns0#LibraryDetails:{
                ns0#User: payload."Book1",
                ns0#User: payload."Book2",
                ns0#User: payload."Book3",
                ns0#User: payload."Book4",
                ns0#User: payload."Book5"
            }

预期输出1是

<LibraryDetails>
   <User>abc</User>
   <User>cde</User>
   <User>fgh</User>
   <User>ijk</User>
   <User>lmn</User>
</LibraryDetails>

预期输出2是

<LibraryDetails>
   <User>opq</User>
   <User>rst</User>
</LibraryDetails>

我们如何才能只转义空值并在数据编织中创建循环。我也尝试了地图功能。您能否对此有所了解。

4

2 回答 2

1

要获得预期的输出,请使用map,然后skipNullOn="everywhere"在您希望在所有元素中使用该逻辑时使用。以下给了我您的预期输出

%dw 1.0
    %output application/xml skipNullOn="everywhere"

    %namespace ns0 http://something.com
    ---

    ns0#LibraryDetails: { (payload map {
          ns0#User: $.Book1,
          ns0#User: $.Book2,
          ns0#User: $.Book3,
          ns0#User: $.Book4,
          ns0#User: $.Book5
    } )  }
于 2016-01-16T17:35:21.050 回答
0

你可以试试这个:

ns0#LibraryDetails:{
                ns0#User: when null != payload."Book1" then payload."Book1" ,
                ns0#User: when null != payload."Book2"then payload."Book2",
                ns0#User: when null != payload."Book3"then payload."Book3",
                ns0#User: when null != payload."Book4"then payload."Book4",
                ns0#User: when null != payload."Book5"then payload."Book5"
            }

ELSE:使用下面的语句:%output application/xml skipNullOn="everywhere"

于 2016-01-16T15:49:58.740 回答