Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Разделить XML-файл на верблюде с помощью .split().tokenizeXML()?

Автор вопроса: NaveenkumarОтветов: 2

Как разбить XML-файл на верблюде с помощью .split().tokenizeXML()? Я прикрепил фрагмент кода. Я не знаю, где я сделал ошибку. Вот мой вклад.

<Record>
  <DataFile xmlns="Created">
  </DataFile>
  <DataFile xmlns="Updated">
  </DataFile>
  <DataFile xmlns="Deleted">
  </DataFile>
</Record>

Вот мой верблюжий маршрут

// Main Route
from(...)
.routeId("processor route")
.process(...)
.to("direct:created",
"direct:updated",
"direct:deleted").end();

// Created
from("direct:created")
.routeId("created route")
.split().tokenizeXML("xmlns:Created", "Record")
.to(...).end();

// Updated
from("direct:updated")
.routeId("updated route")
.split().tokenizeXML("xmlns:Updated", "Record")
.to(...).end();

// Deleted
from("direct:deleted")
.routeId("deleted route")
.split().tokenizeXML("xmlns:Deleted", "Record")
.to(...).end();

мой ожидаемый результат: ... direct:created следует разделить и использовать только этот.

<DataFile xmlns="Created">
</DataFile>

direct:update должен разделиться и использовать только этот.

<DataFile xmlns="Updated">
</DataFile>

и direct:deleted следует разделить и использовать только этот.

<DataFile xmlns="Deleted">
</DataFile>

javaxmlsplitapache-cameldsl

Ответы

Ответ 1 · рейтинг 3 · Claus Ibsen

Вы не можете разделить пространство имен, используя tokenizeXml. Вам нужно будет разделить файл самостоятельно или написать код, который может быть разделен по пространству имен.

Ответ 2 · рейтинг 1 · dey

Я не знаю, как получить значение атрибута "xmlns" в XPath, потому что "xmlns" - это атрибут NameSpace. Если вы можете изменить имя этого атрибута, например, на "атрибут" вы можете использовать примерно так:

Сначала разделите xml на список элементов "DataFile", затем используйте маршрутизацию на основе содержимого, используя значение "атрибут" ("атрибут", потому что я не знаю, как получить значение атрибута "xmlns" в XPath - вы можете найти это самостоятельно и попробуйте)

from("direct:route").split().tokenizeXML("DataFile").streaming().choice()
    .when().xpath("//DataFile[@attribute=&#39;Created&#39;]").to("direct:created")
    .when().xpath("//DataFile[@attribute=&#39;Updated&#39;]").to("direct:updated")
    .otherwise().to("direct:deleted")

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы