我试图在使用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解决方案的困难。
答案 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'
}
答案 1 :(得分:0)
尝试一下。
<when expression="#[output application/java --- XmlModule::xpath('//*[local-name()="TestAccepted"]/@accepted',payload.^raw,{})[0] == 'OWD']">
答案 2 :(得分:0)
我强烈建议使用DataWeave而不是XPath,就像@Alex解决方案一样。甚至documentation of the XML Module都建议使用DataWeave。
如果您真的想仍然使用XPath,则可以使用以下表达式:
#[XmlModule::xpath('//*[local-name()="TestAccepted"]/@accepted', write(payload, 'application/xml'), {}) contains 'OWD']
一个问题是,由于某种原因,有效载荷被解释为对象而不是XML。我使用了显式的write()来强制XML。然后XmlModule :: xpath()函数的结果是一个结果数组,因此我使用contains()来查看结果是否在其中。