Как вытащить все вложенные дочерние узлы из XML?
У меня есть простой XML с вложенными узлами grandChild, как это
<parent>
<child type="reference">
<grandChild name="aaa" action="None">
<Attribute name="xxx">1</Attribute>
<grandChild name="bbb" action="None">
<Attribute name="xxx">1</Attribute>
</grandChild>
<grandChild name="ccc" action="None">
<Attribute name="xxx">1</Attribute>
</grandChild>
</grandChild>
<grandChild name="ddd" action="None">
<Attribute name="xxx">1</Attribute>
</grandChild>
</child>
</parent>
И я хочу получить список всех узлов grandChild только. Я могу достичь при итерации каждого узла, и это дает мне список одного уровня, но не для всего XML. Можно ли добиться этого с помощью единого информационного переплетения?
Мой простой dataweave выглядит следующим образом
%dw 2.0
output application/json
---
payload.parent.child.*grandChild.*grandChild map {
"@name": $.@name,
"Attribute" : $.*Attribute map {
"@name" : $.@name,
"#text" : trim($)
}
}
Желаемый вывод
[
{
"@name": "bbb",
"Attribute": [
{
"@name": "xxx",
"#text": "1"
}
]
},
{
"@name": "ccc",
"Attribute": [
{
"@name": "xxx",
"#text": "1"
}
]
},
{
"@name": "aaa",
"Attribute": [
{
"@name": "xxx",
"#text": "1"
}
]
},
{
"@name": "ddd",
"Attribute": [
{
"@name": "xxx",
"#text": "1"
}
]
}
]
0 ответов
Кажется, это работает:
payload..*grandChild map ( ( elt, index) ->
{
"@name": elt.@name,
"Attribute": elt.*Attribute map ( (attrElt, attrIndex) ->
{ "@name": attrElt.@name,
"#text": trim(attrElt)
}
)
}
)