带条件条件的Mule 4 Xpath表达式

时间:2020-05-17 12:08:59

标签: xpath mule dataweave mule4

我试图在使用m子4的xpath的基于xml输入的表达式中添加#[XmlModule :: xpath] 以下是我的输入

<TestAccepted xmlns="http://api.gsicommerce.com/schema/checkout/1.0"
accepted="OWD">
<Test userId="1234">
    <Name>
        <LastName>TestName</LastName>
        <FirstName>TestName</FirstName>
    </Name>        
</Test>

我想基于

添加一个when条件表达式
#[XmlModule::xpath(//TestAccepted.@accepted == 'OWD')]

请对此提供帮助。 我对m子3的旧逻辑正在起作用。面临寻找m子4解决方案的困难。

3 个答案:

答案 0 :(得分:0)

我相信Mule 4中不推荐使用xpath。请使用常规映射技术:

%dw 2.0
var x=read('<TestAccepted xmlns="http://api.gsicommerce.com/schema/checkout/1.0" accepted="OWD">
<Test userId="1234">
    <Name>
        <LastName>TestName</LastName>
        <FirstName>TestName</FirstName>
    </Name>        
</Test></TestAccepted>','application/xml')
output application/json
---
{
    result: x.TestAccepted.@accepted,
    boolean: x.TestAccepted.@accepted ~= 'OWD'
}

enter image description here

答案 1 :(得分:0)

尝试一下。

<when expression="#[output application/java --- XmlModule::xpath('//*[local-name()=&quot;TestAccepted&quot;]/@accepted',payload.^raw,{})[0] == 'OWD']">

答案 2 :(得分:0)

我强烈建议使用DataWeave而不是XPath,就像@Alex解决方案一样。甚至documentation of the XML Module都建议使用DataWeave。

如果您真的想仍然使用XPath,则可以使用以下表达式:

#[XmlModule::xpath('//*[local-name()=&quot;TestAccepted&quot;]/@accepted', write(payload, 'application/xml'), {}) contains 'OWD']

一个问题是,由于某种原因,有效载荷被解释为对象而不是XML。我使用了显式的write()来强制XML。然后XmlModule :: xpath()函数的结果是一个结果数组,因此我使用contains()来查看结果是否在其中。