骡子 4 中的 xpath 3 到 XmlModule::xpath()
xpath 3 to XmlModule::xpath() in mule 4
我正在尝试从 Mule 3 迁移到 Mule 4。
Mule 4 不支持 XPATH3。
我在 Mule3 中有 xpath:
xpath3('/DTOApplication/DTOLocation[@Status=\'Active\']',flowVars.domPayload,'NODESET')
Mule 3 流量:
<flow name="xpath_transformFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/stepnode" allowedMethods="POST" doc:name="HTTP"/>
<set-variable variableName="dtolocation" value="#[xpath3('/DTOApplication/DTOLocation[@Status=\'Active\']',flowVars.domPayload,'NODESET')]" doc:name="set dtolocation"/>
<logger message="#[flowVars.dtolocation]" level="INFO" doc:name="Logger"/>
</flow>
xml 负载:https://github.com/Manikandan99/rate-dtostep/blob/master/request.xml
我正在使用 #[XmlModule::xpath()] 在 mule 4 中尝试 xpath,但它显示错误。
错误信息:
Script 'XmlModule::xpath('/DTOApplication/DTOLocation[@Status=\'Active\'],vars.domPayload,
{}) ' has errors: Invalid input ''', expected ')' for the function
call. (line 1, column 18): at 1 : 1" evaluating expression:
"#[XmlModule::xpath('/DTOApplication/DTOLocation[@Status=\'Active\'],vars.domPayload,
{})]".
Mule 4流:
<flow name="var_xpath_testFlow" doc:id="406270fb-17e7-48e9-a33a-f7a0197f8e05" >
<http:listener doc:name="Listener" doc:id="662f2277-859f-4516-974b-de7cceeb5b40" config-ref="HTTP_Listener_config" path="/vartest"/>
<set-variable value="#[payload]" doc:name="Set domPayload" doc:id="2495ac98-b976-41e0-9dcf-398574e54ffa" variableName="domPayload"/>
<set-variable value="#[XmlModule::xpath('/DTOApplication/DTOLocation[@Status=\'Active\'],vars.domPayload, {})]" doc:name="Set dtolocation_value" doc:id="3c751150-3606-4c40-9748-e658d9e6e59e" variableName="dtolocation_value"/>
<logger level="INFO" doc:name="Logger" doc:id="f495b0bf-f8cb-43be-b4d9-d069758e4028" message="#[vars.dtolocation_value]"/>
</flow>
如何在 mule 4 中使用它?
对 xpath() 的调用在第一个右括号后的第一个参数中缺少右引号。看起来它在表达式中已修复,但错误消息未更新。
无论如何,在那之后我遇到了一个错误,因为该函数需要一个二进制作为第二个参数。在我的测试中,xpath-extract 操作运行良好:
<xml-module:xpath-extract xpath="/DTOApplication/DTOLocation[@Status='Active']" doc:name="Xpath extract"/>
作为替代方案,我更喜欢使用 DataWeave:
%dw 2.0
output application/xml
---
payload.DTOApplication filterObject ($$ as String == "DTOLocation" and $$.@Status == "Active")
请注意,如果您使用输出来执行进一步处理,则最好输出 application/java。
我正在尝试从 Mule 3 迁移到 Mule 4。
Mule 4 不支持 XPATH3。
我在 Mule3 中有 xpath:
xpath3('/DTOApplication/DTOLocation[@Status=\'Active\']',flowVars.domPayload,'NODESET')
Mule 3 流量:
<flow name="xpath_transformFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/stepnode" allowedMethods="POST" doc:name="HTTP"/>
<set-variable variableName="dtolocation" value="#[xpath3('/DTOApplication/DTOLocation[@Status=\'Active\']',flowVars.domPayload,'NODESET')]" doc:name="set dtolocation"/>
<logger message="#[flowVars.dtolocation]" level="INFO" doc:name="Logger"/>
</flow>
xml 负载:https://github.com/Manikandan99/rate-dtostep/blob/master/request.xml
我正在使用 #[XmlModule::xpath()] 在 mule 4 中尝试 xpath,但它显示错误。
错误信息:
Script 'XmlModule::xpath('/DTOApplication/DTOLocation[@Status=\'Active\'],vars.domPayload,
{}) ' has errors: Invalid input ''', expected ')' for the function
call. (line 1, column 18): at 1 : 1" evaluating expression:
"#[XmlModule::xpath('/DTOApplication/DTOLocation[@Status=\'Active\'],vars.domPayload,
{})]".
Mule 4流:
<flow name="var_xpath_testFlow" doc:id="406270fb-17e7-48e9-a33a-f7a0197f8e05" >
<http:listener doc:name="Listener" doc:id="662f2277-859f-4516-974b-de7cceeb5b40" config-ref="HTTP_Listener_config" path="/vartest"/>
<set-variable value="#[payload]" doc:name="Set domPayload" doc:id="2495ac98-b976-41e0-9dcf-398574e54ffa" variableName="domPayload"/>
<set-variable value="#[XmlModule::xpath('/DTOApplication/DTOLocation[@Status=\'Active\'],vars.domPayload, {})]" doc:name="Set dtolocation_value" doc:id="3c751150-3606-4c40-9748-e658d9e6e59e" variableName="dtolocation_value"/>
<logger level="INFO" doc:name="Logger" doc:id="f495b0bf-f8cb-43be-b4d9-d069758e4028" message="#[vars.dtolocation_value]"/>
</flow>
如何在 mule 4 中使用它?
对 xpath() 的调用在第一个右括号后的第一个参数中缺少右引号。看起来它在表达式中已修复,但错误消息未更新。
无论如何,在那之后我遇到了一个错误,因为该函数需要一个二进制作为第二个参数。在我的测试中,xpath-extract 操作运行良好:
<xml-module:xpath-extract xpath="/DTOApplication/DTOLocation[@Status='Active']" doc:name="Xpath extract"/>
作为替代方案,我更喜欢使用 DataWeave:
%dw 2.0
output application/xml
---
payload.DTOApplication filterObject ($$ as String == "DTOLocation" and $$.@Status == "Active")
请注意,如果您使用输出来执行进一步处理,则最好输出 application/java。