【问题标题】:Mule 4 Xpath Expression With When Condition带有When条件的Mule 4 Xpath表达式
【发布时间】:2020-09-03 04:28:18
【问题描述】:

我正在尝试使用 mule 4 的 xpath #[XmlModule::xpath] 添加基于 xml 输入的表达式 以下是我的意见

<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')]

请在这方面提供帮助。 我对 mule 3 的旧逻辑正在运行。面临寻找骡子 4 解决方案的困难。

【问题讨论】:

  • &lt;when expression="#[XmlModule::xpath3('//*[local-name()="TestAccepted"]/@accepted') == 'OWD']"&gt; 的输出是什么?
  • Nops 不工作... :(
  • 我在 Mule 4 的文档中没有看到 xpath3()。

标签: xpath mule dataweave mule4


【解决方案1】:

我相信 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'
}

【讨论】:

【解决方案2】:

试试这个..

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

【讨论】:

    【解决方案3】:

    我强烈建议使用 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() 来查看结果是否在里面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多