2015-04-25 78 views
0

如何使用.split().flagizeXML()在駱駝中分割xml文件?我附上了代碼片段。我不知道我犯了什麼錯誤。 這是我的輸入。使用.split()分割xml文件在camel中。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:updated應該拆分並僅使用這一個。

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

and direct:deleted should split and only this one only。

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

回答

3

您不能按名稱空間使用tokenizeXml進行拆分。你需要自己拆分文件,或者編寫一些可以按名稱空間拆分的代碼。

+0

謝謝...有駱駝的DSL任何其他選項來分離這種XML的? – Naveenkumar

1

我不知道如何在XPath中獲得「xmlns」屬性的值,因爲「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")