如何在 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/
<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/