Camel Apache: xpath для извлечения некоторого значения из полученного XML - PullRequest
4 голосов
/ 09 марта 2012

во время моих маршрутов Camel я запрашиваю сервер (HTTP GET), и в результате я получаю 200 OK с телом 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») и сохранить это значение в свойстве exchange?Я думаю, используя выражение xpath?Или ... Спасибо за вашу помощь.

1 Ответ

9 голосов
/ 09 марта 2012

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

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

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

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

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(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...