xml - Dataweave - 循环深度映射 XML

标签 xml loops mule dataweave depth

我有一个包含以下示例的 XML payload:

<Example>
    <Brand>
        <Id>987S</Id>
        <logo>circle</logo>
        <Item>
            <Name>cologne1</Name>
            <Item>
                <Name>Bosque</Name>
            </Item>
        </Item>
        <Item>
            <Name>t-Shirt</Name>
        </Item>
    </Brand>
    <Brand>
        <Id>877823C</Id>
        <logo>circle</logo>
        <Item>
            <Name>t-Shirt2</Name>
            <Item>
                <Name>t-Shirt black</Name>
                <Item>
                    <Name>t-Shirt black with logo</Name>
                </Item>
            </Item>
        </Item>
    </Brand>
</Example>

XML分为:

  • 作为根节点的例子
    • 品牌对象
      • Item 对象:这些 Items 还可以包含更多 Items

我随机获得此结构,直到每个项目深入 3 级

预期的输出是将同一级别的所有项目放入父节点:

<Supermarket>
    <Item>
        <BarValue>cologne1</BarValue>
    </Item>
    <Item>
        <BarValue>Bosque</BarValue>
    </Item>
    <Item>
        <BarValue>t-Shirt</BarValue>
    </Item>
    <Item>
        <BarValue>t-Shirt2</BarValue>
    </Item>
    <Item>
        <BarValue>t-Shirt black</BarValue>
    </Item>
    <Item>
        <BarValue>t-Shirt black with logo</BarValue>
    </Item>
</Supermarket>

有没有办法用 Dataweave 动态循环 XML 文件?

最佳答案

一些方法可以做到这一点:

%dw 2.0
output application/xml
---
{
    Supermarket: {(
        payload..*Item map {
            Item: {
                BarValue: $.Name
            }
        }
    )}
}

后代选择器 payload..Item 获取任何级别的所有项目。然后,对于每个 Item,我们生成一个包含 {Item: {BarValue: $.Name}} 的对象,并获得项目对象的 Array

问题是DataWeave中的XML模型用ObjectsStrings表示元素标签和值,没有Array的概念(这是我们的项目结果)。

所以我们使用动态对象特性{(expr)} 其中expr返回一个Array键扩展为对象的键值对的值对。

备选方案:

%dw 2.0
output application/xml
---
{
    Supermarket: {
        Item: {
            BarValue: payload..*Item.Name
        }
    }
}

最后一个之所以有效,是因为在 XML 中,当作者尝试编写一个 Array 时,它会重复包含所述 ArrayKey (Item) > (有效载荷..项目.名称)

关于xml - Dataweave - 循环深度映射 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812469/

相关文章:

php - 使用 PHP 打破 XML 中的句子

android - 无法动态添加 View

xml - 如何实现xsl

java - 在 Java 中迭代枚举的 for 循环

eclipse - 如何使用 Mule studio Eclipse 插件更改日志记录级别

javascript - 当项目嵌套在同一括号中时读取 XML 文件

使用导入文件的 Java 循环

java - 遍历数组元素OnClickListener android studio

licensing - CPAL 骡子许可证

Mule MEL 在流变量上做子串