用于在Xml中检索属性的Mule Dataweave脚本

时间:2017-06-28 09:07:30

标签: mule mule-component dataweave

我的输入Xml如下所示

<?xml version="1.0" encoding="UTF-8"?>
<elements>
<element>
  <id>123</id>
  <items>
     <item>
        <attributes>
        <attribute attribute-id="test1">attr1</attribute>
         <attribute attribute-id="test2">attr2</attribute>                      
        </attributes>
     </item>
  </items>
</element>
</elements>

我尝试使用以下Dataweave脚本:

%dw 1.0
%output application/xml
---
{
    elements: {  (payload.elements.*element map {
        element: {
            test1 : $.items.item.attributes.attribute when $.items.item.attributes.attribute.@attribute-id == 'test1' otherwise '', 
            test2 : $.items.item.attributes.attribute when $.items.item.attributes.attribute.@attribute-id == 'test2' otherwise '' 
        }
        }
        )
    }

    }

预期产出:

<?xml version='1.0' encoding='windows-1252'?>
<elements>
  <element>
    <test1>attr1</test1>
    <test2>attr2</test2>
  </element>
</elements>

实际输出:

<?xml version='1.0' encoding='windows-1252'?>
<elements>
  <element>
    <test1>attr1</test1>
    <test2></test2>
  </element>
</elements>

我的数据编织脚本需要进行哪些更改才能获得预期的输出?

2 个答案:

答案 0 :(得分:2)

试试这个

%dw 1.0
%output application/xml
---
{
    elements: {  (payload.elements.*element map {
        element: {($.items.item.attributes.*attribute map {
            ($.@attribute-id) : $
        })}
        }
     )
    }

您的工作不正常,因为有多个items.item.attributes.attribute

希望这有帮助。

答案 1 :(得分:0)

检查以下脚本

%dw 1.0
%output application/xml
---
{
    elements: {
        (payload.elements.*element map {
            element: {
                ($.items.item.attributes.*attribute map ((element, index) -> {
                    (element.@attribute-id) : element when element.@attribute-id == "test1" or element.@attribute-id == "test2"
                    otherwise ''
                }))
            }
        }
     )
    }
}

它检查attribute-id是否为“test1和test2”,如果不同则将值设置为空。