分裂XML消息和聚合基于在骡ESB某些条件(splitting an xml message and

2019-11-04 00:20发布

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

我需要从文件中读取此输入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>
 .
 .
 .

我有点新的骡子ESB。 我很困惑与转型和骡子的转换。

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

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

Answer 1:

使用for each组件和迭代每个订单元素。 提示:使用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所以最后一部分意义。



文章来源: splitting an xml message and aggregating based on some condition in mule esb