【问题标题】:how to replace value using xpath3 expression in mule esb如何在 mule esb 中使用 xpath3 表达式替换值
【发布时间】:2015-07-19 06:13:09
【问题描述】:
 <babyproducts>
       <products>
           <product1>
               <productid>100</productid>
               <productname>towel</productname>
               <desc>towel</desc>
               <discount>100</discount>
               <validlity>10</validlity>
           </product1>
           <product2>
               <productid>101</productid>
               <productname>pillow</productname>
               <desc>pillow</desc>
               <discount>500</discount>
               <validlity>5</validlity>
           </product2>
       </product>
</babyproducts>

我想使用 xpath3 表达式 拆分上面的 xml 并替换有效性值。之后我想要上面的整套 xml 替换值。我尝试使用 xpath 它工作正常。 我的要求坚持使用 xpath3 mule 表达式

<splitter evaluator="xpath" expression="/babyproducts/products" doc:name="Splitter" />  
  <set-payload value="#[message.payload]" doc:name="Set Payload" />
  <enricher source="#[flowVars.newvalidlity]" target="#[xpath('/products/validlity').text ]" doc:name="Message Enricher">
     <logger level="INFO" message=" enricher done ~~~~~.." doc:name="Logger" />
  </enricher>

以上是我使用 xpath 的 mule 流程。我的团队想要使用 xpath3(最新)

我的预期输出如下所示,新的有效性值为 50(来自流变量)

<babyproducts>
       <products>
           <product1>
               <productid>100</productid>
               <productname>towel</productname>
               <desc>towel</desc>
               <discount>100</discount>
               <validlity>50</validlity>
           </product1>
           <product2>
               <productid>101</productid>
               <productname>pillow</productname>
               <desc>pillow</desc>
               <discount>500</discount>
               <validlity>50</validlity>
           </product2>
       </product>
</babyproducts>

【问题讨论】:

  • 不,这是不同的情况来自我的技术管理团队,我的要求坚持使用 xpath3 mule 表达式。不,这是为了其他要求,特别是使用 xpath3
  • 你能发布你现有的 xpath 配置吗?
  • 我更新了我的 mule 流程和我的问题中的预期输出

标签: mule


【解决方案1】:

首先,您的 XML 示例无效。有未闭合的标签,您的 xpath 也不匹配示例的结构。

其次,我只能显示您的 xpath 表达式的等效 xpath3 表达式,因为我已经在您的其他问题中回答了如何更新 XML 节点。

<splitter evaluator="xpath" expression="/babyproducts/products" doc:name="Splitter" />  

变成:

<splitter expression="#[xpath3('/babyproducts/products/*', payload, 'NODESET')]"
            doc:name="Splitter" />

#[xpath('/products/validlity').text] 

变成:

 #[xpath3('/products/validlity')]

不需要 .text,因为默认情况下会返回 Stirng 值。更多信息在这里:http://blogs.mulesoft.org/mule-3-6-xml-xpath-xslt-xquery3/

【讨论】:

  • 嗨,我没有得到任何预期的以上输出(在我的问题中添加)使用 xpath3 。任何人都共享 xapth3 流程
  • 谢谢你。对 mule 来说仍然很新,所以在找到引用 xpath 的在线资源并希望确保我的代码对 MULE4 更有未来的证明之后,这非常有用
猜你喜欢
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多