在Mule ESB中使用条件XPath

时间:2015-11-26 09:55:53

标签: xpath 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>

我的要求是根据相应的<Receiver>值提取<Sender>值。 (例如,当Sender值为“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= &quot;+ flowVars.satya +&quot;]/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

2 个答案:

答案 0 :(得分:1)

要从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"/>

答案 1 :(得分:0)

使用字符串连接来构建表达式,这将起作用:

 #[xpath3('/DatabaseValues/Value[Sender=&quot;' + flowVars.satya + '&quot;]/Receiver')]
相关问题