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

Mule Dataweave script for retrieving attributes in Xml

我的输入 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>

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

试试这个

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

你的不工作,因为有多个 items.item.attributes.attribute

希望对您有所帮助。

检查下面的脚本

%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 and test2",如果不同则将值设置为空。