在 Mule ESB 中使用条件 XPath
Using Conditional XPath in Mule ESB
我的输入 XML 是
<DatabaseValues>
<Value>
<Sender>Satya</Sender>
<WB_TRANSFORMATION>1</WB_TRANSFORMATION>
<WB_VALIDATION>0</WB_VALIDATION>
<WB_ENRICHMENT>0</WB_ENRICHMENT>
<Receiver>Ch</Receiver>
</Value>
<Value>
<Sender>Keerthika</Sender>
<WB_TRANSFORMATION>1</WB_TRANSFORMATION>
<WB_VALIDATION>0</WB_VALIDATION>
<WB_ENRICHMENT>0</WB_ENRICHMENT>
<Receiver>SS</Receiver>
</Value>
我的需求是根据对应的<Sender>
值提取出<Receiver>
值。 (例如,当发件人值为 "Satya" 时,我需要提取 "Ch")。这应该使用 xpath 表达式来实现。
我试过以下
<set-variable variableName="satya" value="#[xpath3('/DatabaseValues/Value[1]/Sender')]" doc:name="Variable"/>
然后我做了这个
#[xpath3('/DatabaseValues/Value[Sender="flowVars.satya"]/Receiver')]
没有正在提取的值。但是当我使用下面的逻辑时它起作用了
#[xpath3('/DatabaseValues/Value[Sender="Satya"]/Receiver')]
我的流量配置如下
<file:connector name="File" autoDelete="true" streaming="false" validateConnections="true" doc:name="File"/>
<flow name="Sender_TransformationFlow">
<file:inbound-endpoint path="C:\Users\Satyakeerthika_Ch\Desktop\Input" connector-ref="File" responseTimeout="10000" doc:name="File"/>
<set-variable variableName="satya" value="#[xpath3('/DatabaseValues/Value[1]/Sender')]" doc:name="Variable"/>
<set-variable variableName="xpath" value="#[xpath3('/DatabaseValues/Value[Sender= "+ flowVars.satya +"]/Receiver')]" doc:name="Variable"/>
<logger message="#[flowVars.xpath]" level="INFO" doc:name="Logger"/>
<logger message="#[flowVars.satya]" level="INFO" doc:name="Logger"/>
</flow>
我想知道如何使用 flowVars 而不是 Xpath 中的硬编码值来进行检查。
我正在使用 Anypoint Studio 版本 5.1.0
使用字符串连接构建表达式,这将起作用:
#[xpath3('/DatabaseValues/Value[Sender="' + flowVars.satya + '"]/Receiver')]
要从 xpath3 函数访问流变量,您应该使用 '$' 而没有 'flowVars'
查看文档
https://docs.mulesoft.com/mule-user-guide/v/3.7/xpath#query-parameters
在你的例子中:
<set-variable variableName="xpath" value="#[xpath3('/DatabaseValues/Value[Sender=$satya]/Receiver')]" doc:name="Variable"/>
我的输入 XML 是
<DatabaseValues>
<Value>
<Sender>Satya</Sender>
<WB_TRANSFORMATION>1</WB_TRANSFORMATION>
<WB_VALIDATION>0</WB_VALIDATION>
<WB_ENRICHMENT>0</WB_ENRICHMENT>
<Receiver>Ch</Receiver>
</Value>
<Value>
<Sender>Keerthika</Sender>
<WB_TRANSFORMATION>1</WB_TRANSFORMATION>
<WB_VALIDATION>0</WB_VALIDATION>
<WB_ENRICHMENT>0</WB_ENRICHMENT>
<Receiver>SS</Receiver>
</Value>
我的需求是根据对应的<Sender>
值提取出<Receiver>
值。 (例如,当发件人值为 "Satya" 时,我需要提取 "Ch")。这应该使用 xpath 表达式来实现。
我试过以下
<set-variable variableName="satya" value="#[xpath3('/DatabaseValues/Value[1]/Sender')]" doc:name="Variable"/>
然后我做了这个
#[xpath3('/DatabaseValues/Value[Sender="flowVars.satya"]/Receiver')]
没有正在提取的值。但是当我使用下面的逻辑时它起作用了
#[xpath3('/DatabaseValues/Value[Sender="Satya"]/Receiver')]
我的流量配置如下
<file:connector name="File" autoDelete="true" streaming="false" validateConnections="true" doc:name="File"/>
<flow name="Sender_TransformationFlow">
<file:inbound-endpoint path="C:\Users\Satyakeerthika_Ch\Desktop\Input" connector-ref="File" responseTimeout="10000" doc:name="File"/>
<set-variable variableName="satya" value="#[xpath3('/DatabaseValues/Value[1]/Sender')]" doc:name="Variable"/>
<set-variable variableName="xpath" value="#[xpath3('/DatabaseValues/Value[Sender= "+ flowVars.satya +"]/Receiver')]" doc:name="Variable"/>
<logger message="#[flowVars.xpath]" level="INFO" doc:name="Logger"/>
<logger message="#[flowVars.satya]" level="INFO" doc:name="Logger"/>
</flow>
我想知道如何使用 flowVars 而不是 Xpath 中的硬编码值来进行检查。
我正在使用 Anypoint Studio 版本 5.1.0
使用字符串连接构建表达式,这将起作用:
#[xpath3('/DatabaseValues/Value[Sender="' + flowVars.satya + '"]/Receiver')]
要从 xpath3 函数访问流变量,您应该使用 '$' 而没有 'flowVars'
查看文档
https://docs.mulesoft.com/mule-user-guide/v/3.7/xpath#query-parameters
在你的例子中:
<set-variable variableName="xpath" value="#[xpath3('/DatabaseValues/Value[Sender=$satya]/Receiver')]" doc:name="Variable"/>