如何在 mule esb 中使用 xpath3 表达式替换值

how to replace value using xpath3 expression in mule esb

 <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>

首先你的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 returns Stirng 值。更多信息在这里:http://blogs.mulesoft.org/mule-3-6-xml-xpath-xslt-xquery3/