Mule 4 Xpath Expression with When Condition.

问题描述 投票:1回答:1

我试图使用mule 4的xpath来添加基于xml输入的when表达式#[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>

我想添加一个基于当条件表达式的

#[XmlModule::xpath(//TestAccepted.@accepted == 'OWD')]

我的老逻辑在骡子3上是有效的。面临困难,找到mule 4的解决方案。

xpath mule dataweave mule4
1个回答
0
投票

我相信xpath在Mule 4中已被废弃。使用常规的映射技术:

%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


0
投票

试试这个...

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

0
投票

我强烈建议使用DataWeave而不是XPath,就像@Alex的解决方案一样。即使是 XML模块的文档 建议使用DataWeave。

如果你真的真的想继续使用XPath,那么你可以使用这个表达式。

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

问题是由于某些原因,payload被解释为一个对象而不是XML. 我使用了一个显式的write()来强制使用XML。然后XmlModule::xpath()函数的结果是一个结果数组,所以我用contains()来看看结果是否在里面。

© www.soinside.com 2019 - 2024. All rights reserved.