如何在 Mulesoft 中遍历 xml 文件

How to traverse xml file in Mulesoft

提问人:user15592843 提问时间:4/14/2021 更新时间:4/14/2021 访问量:310

问:

在我的输入有效负载中,我将获得值 Username=erepair、Password=erepairtest 和 InterfaceName=ABC。 我需要检查所有这些值是否存在于 scr/main/resource 下的 partner.xml 文件中的特定合作伙伴节点下。

基本上,需要检查接口“ABC”是否被授权进行 erepair/erepairtest

    <PartnerMain>
        <Partner>
            <userName>erepair</userName>
            <userPassword>erepairtest</userPassword>
            <AuthorizedInterface>
                <name>ABC</name>
            </AuthorizedInterface>
            <AuthorizedInterface>
                <name>EFG</name>
            </AuthorizedInterface>
        </Partner>
        <Partner>
            <userName>pair</userName>
            <userPassword>pairtest</userPassword>
            <AuthorizedInterface>
                <name>ABC</name>
            </AuthorizedInterface>
            <AuthorizedInterface>
                <name>EFG</name>
            </AuthorizedInterface>
        </Partner>
    </PartnerMain>  
dom xml-parsing mule mulesoft

评论


答:

1赞 Salim Khan 4/14/2021 #1

假设您将使用 Mule 4.x 运行时,从而使用 DataWeave 2.0

您可以将筛选器应用于传入的输入有效负载,并检查要匹配的条件。

例如,假设您有包含 userName、password 和 InterfaceName 的变量(因为我正在使用 playground,我想向您展示手头问题的快速解决方案)。假设您的有效负载是 partner.xml 文件(由于您将在 Mule 流中实现它,因此您将使用 file:read 操作并在 Dataweave 转换消息组件中引用它。

根据有效负载检查字段的脚本如下所示:

脚本

%dw 2.0
output application/json
var userName="erepair"
var password="erepairtest"
var interfaceName="ABC"
---
(payload.PartnerMain.*Partner filter (($.userName == userName) and ($.userPassword == password) and ($.AuthorizedInterface.*name contains interfaceName)))[0]

输入

<PartnerMain>
        <Partner>
            <userName>erepair</userName>
            <userPassword>erepairtest</userPassword>
            <AuthorizedInterface>
                <name>ABC</name>
            </AuthorizedInterface>
            <AuthorizedInterface>
                <name>EFG</name>
            </AuthorizedInterface>
        </Partner>
        <Partner>
            <userName>pair</userName>
            <userPassword>pairtest</userPassword>
            <AuthorizedInterface>
                <name>ABC</name>
            </AuthorizedInterface>
            <AuthorizedInterface>
                <name>EFG</name>
            </AuthorizedInterface>
        </Partner>
    </PartnerMain>  

输出

{
  "userName": "erepair",
  "userPassword": "erepairtest",
  "AuthorizedInterface": {
    "name": "ABC"
  },
  "AuthorizedInterface": {
    "name": "EFG"
  }
}

评论

0赞 Salim Khan 4/15/2021
确定。。请接受答案,以便其他人将来可以使用相同的答案。