2015-08-28 30 views
0

我inputXML:分裂XML消息和聚合基於一些條件騾子ESB

<Orders> 
<Order><OrderId>1</OrderId><Total>10</Total></Order> 
<Order><OrderId>2</OrderId><Total>20</Total></Order> 
<Order><OrderId>3</OrderId><Total>30</Total></Order> 
<Order><OrderId>4</OrderId><Total>40</Total></Order> 
<Order><OrderId>5</OrderId><Total>50</Total></Order> 
<Order><OrderId>5</OrderId><Total>60</Total></Order> 
<Order><OrderId>5</OrderId><Total>70</Total></Order> 
<Order><OrderId>5</OrderId><Total>80</Total></Order> 
<Order><OrderId>5</OrderId><Total>90</Total></Order> 
</Orders> 

我需要從文件中讀取該輸入XML。並需要寫這基於以下條件

/Orders/Order/Total==10 then write this record to file1. 
/Orders/Order/Total>10 and /Orders/Order/Total<=40 then write the records to file2. 
/Orders/Order/Total>40 then write the records to file3. 

我的文件1 O/P(預期)不同的文件:

<OrderId>1</OrderId><Total>10</Total> 

我的文件2 O/P(預計):

<OrderId>2</OrderId><Total>20</Total> 
<OrderId>3</OrderId><Total>30</Total> 
<OrderId>4</OrderId><Total>40</Total> 

我的文件3 O/p(預期):

<OrderId>5</OrderId><Total>50</Total> 
<OrderId>6</OrderId><Total>60</Total> 
<OrderId>7</OrderId><Total>70</Total> 
. 
. 
. 

我對Mule ESB有點新鮮。我對騾子的轉換和轉換感到困惑。

能有人建議最好的分裂和聚合的策略和組件在我的騾子flow.Also在組件中使用的配置中使用..

請注意,是一個樣本輸入XML。我實時需要處理大型XML文件。所以建議最好的解決方案。提前致謝!

回答

0

使用for each組件並迭代到每個Order元素。提示:使用xpath。例如,將其放在收集字段#[xpath3('//*:Orders//*:Order', payload, 'NODESET')]

for each的內部,添加一個具有這些條件的選擇組件。顯然,在這裏也使用xpath。例如,在組件#[Integer.parseInt(xpath3('.//Total',payload)) > 40]

在每個選項的選項上,放置一個DOM to XML組件以將訂單元素設置爲有效內容,然後添加Object to String組件。最後一個鏈將是文件寫/附加邏輯,它可以是java變換器或表達式組件。 (更好的選擇是使用StringBuilder,您只需追加每個訂單,然後將3個文件保存在for each組件之後)。

希望你知道Java,所以最後一部分是有意義的。