Как получить количество узлов XML в верблюде - PullRequest
0 голосов
/ 26 сентября 2019

Я хочу получить количество узлов xml, присутствующих в файле с определенными тегами в обмене верблюдами или маршруте верблюда.

Мои теги xml выглядят так:

<parent>
  <child>
    <data>A</data>
  </child>
  <child>
    <data>B</data>
  </child>
  <child>
    <data>C</data>
    <child>
       <data>C1</data>
    </child>
    <child>
       <data>C2</data>
    </child>
  </child>
</parent>

Я хочу сосчитать теги <child>, и он должен вернуть 5 для этого.

В настоящее время я получаю размер с помощью Exchange, но вывод его равен 3.

exchange.getIn().getBody(XmlTreesType.class).getParentTree().getChildNode().size(); 

1 Ответ

1 голос
/ 27 сентября 2019

Это сильно зависит от вашего фактического варианта использования.

Чтобы извлечь счет, вы можете использовать XPath язык , который позволяет вам легко извлекать информацию из XML.

Чтобы извлечь количество всех <child> узлов в вашем <parent>, вы можете использовать следующее:

count(/parent//child)

Выражение XPath.

Чтобы извлечь это значение и сохранить его в заголовкепеременная будет выглядеть следующим образом:

.from()
  .setHeader("childCountHeader", xpath("count(/parent//child)", Integer.class));

Другой типичный пример использования верблюжьей Java DSL будет следующим: прямая маршрутизация на основе счетчика:

from()
  .choice().xpath("count(/parent//child)>5")
  //do something
  .otherwise()
  //do something else
  .end();

Есливы хотите использовать XPath внутри ванильной Java, как в верблюжьем процессоре.Вы можете собрать процессор XPath, как описано в этот ответ .

...