分割xml消息并基于mule esb中的某些条件进行聚合

时间:2015-08-28 06:35:39

标签: xml mule mule-studio

我的inputXML:

 <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>

我需要从File中读取这个输入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有点新意。我对骡子的转换和转换感到困惑。

有人可以建议在我的骡子流中使用最好的分裂和聚合策略和组件。也可以在组件中使用配置..

请注意,这是一个输入XML示例。我实时需要处理大型XML文件。所以建议最好的解决方案。提前致谢!

1 个答案:

答案 0 :(得分:0)

使用for each组件并迭代到每个Order元素。提示:使用xpath。例如,将其放在集合字段#[xpath3('//*:Orders//*:Order', payload, 'NODESET')]

for each内,添加具有这些条件的选择组件。显然,也可以在这里使用xpath。例如,在组件#[Integer.parseInt(xpath3('.//Total',payload)) > 40]

在每个选项的选项上,放置一个DOM to XML组件将order元素设置为payload,然后添加Object to String组件。链上的最后一个是文件写/附加逻辑,它可以是java变换器或表达式组件。 (更好的选择是使用StringBuilder,您只需附加每个订单,然后在for each组件之后保存3个文件。)

希望你了解Java所以最后一部分是有道理的。