我的输入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>
我的数据编织脚本需要进行哪些更改才能获得预期的输出?
答案 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”,如果不同则将值设置为空。