我试图使用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 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'
}
试试这个...
<when expression="#[output application/java --- XmlModule::xpath('//*[local-name()="TestAccepted"]/@accepted',payload.^raw,{})[0] == 'OWD']">
我强烈建议使用DataWeave而不是XPath,就像@Alex的解决方案一样。即使是 XML模块的文档 建议使用DataWeave。
如果你真的真的想继续使用XPath,那么你可以使用这个表达式。
#[XmlModule::xpath('//*[local-name()="TestAccepted"]/@accepted', write(payload, 'application/xml'), {}) contains 'OWD']
问题是由于某些原因,payload被解释为一个对象而不是XML. 我使用了一个显式的write()来强制使用XML。然后XmlModule::xpath()函数的结果是一个结果数组,所以我用contains()来看看结果是否在里面。