2012-03-09 2 views
4

во время моих маршрутов верблюдов, я запрашиваю сервер (HTTP GET), и в результате я получаю 200 OK с телом XML, похожим на это:Верблюд Apache: xpath, чтобы извлечь некоторое значение из полученного XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<userProfiles xmlns="http://www.mycompany.com/AEContext/xmldata"> 
    <userProfile name="guest"> 
    <userProfileAttributes> 
     <userProfileAttribute name="parameter1" value="data1" nameVisibility="ALL"/> 
     <userProfileAttribute name="parameter2" value="data2" nameVisibility="ALL"/> 
     <userProfileAttribute name="parameter3" value="data3" nameVisibility="ALL"/> 
    </userProfileAttributes> 
    </userProfile> 
</userProfiles> 

Любая идея, как я могу получить значение параметра «parameter2» в части XML (в моем примере «data2») и сохранить это значение в свойстве обмена? Думаю, используя выражение xpath? Или ... Спасибо за вашу помощь.

ответ

9

Простым способом получения значения будет использование XPath Language. Это позволит вам извлечь нужные данные и установить их где-нибудь (заголовок, тело, ...). Вот как установить параметр2 заголовок со значением:

<setHeader headerName="parameter2"> 
    <xpath resultType="java.lang.String"> 
    /userProfiles/userProfile/userProfileAttributes/userProfileAttribute[2]/@value 
    </xpath> 
</setHeader> 

Использование Java DSL

Пример использования DSL Java и настройки тела сообщения:

final Namespaces ns = new Namespaces("c", "http://www.mycompany.com/AEContext/xmldata"); 

// existing code 
from(...) 
    .setBody(
    ns.xpath(
     "/c:userProfiles/userProfile/userProfileAttributes/userProfileAttribute[2]/@value", 
     String.class) 
    ) 
    .to(...); 
+0

Привет Оливье , спасибо уже за ваш ответ. У меня есть еще один вопрос: предположим, что я не всегда уверен, что параметр userProfileAttribute, который мне нужен, находится в позиции 2. Есть ли способ ссылаться через Xpath на userProfileAttribute с именем «parameter2», чтобы получить его значение? – opstalj

+0

Может ли быть так:/userProfiles/userProfile/userProfileAttributes/userProfileAttribute [@ name = 'parameter2']/@ value? – opstalj

+0

Любое допустимое выражение XPath должно поддерживаться. Я просто извлек путь, используя FOXE (http://www.firstobject.com/dn_editor.htm) –

Смежные вопросы