2015-11-26 5 views
0

Мой вход XML-этоИспользование условных XPath в Mule ESB

<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> значения. (например, мне нужно извлечь «Ch», когда значение Sender «Satya»). Это должно быть достигнуто с использованием выражения 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 студийной версии 5.1.0

+0

Вы отсутствующие одиночные кавычки либо сторона " Используйте выражение, которое я отвечал, как это: # [xpath3 ('/ DatabaseValues ​​/ Значение [Sender =' " + flowVars.satya + '"]/Receiver')] –

ответ

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"/> 
+0

Спасибо тонну. Это работает :) –

0

Используйте String конкатенации для создания выражения, это будет работать:

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

Спасибо за ответ. Протестировано. Но не получилось. Он не извлекает никакой ценности. –

+0

Это работает для меня на основе размещенного вами xml. Можете ли вы опубликовать полную конфигурацию, которую используете сейчас? не забудьте использовать ", а не ' –