2015-04-25 1 views
0

Как разбить xml-файл на верблюде с помощью .split(). TokenizeXML()? Я прикрепил фрагмент кода. Я не знаю, где я ошибся. Вот мой вход.Сплит 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(); 

мой ожидается выход ... прямой: создан должны разделить и использовать только этот.

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

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

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

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

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

ответ

3

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

+0

Спасибо ... Есть ли другой вариант в camel dsl для разделения этого вида XML? – Naveenkumar

1

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

Сначала разделите 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")