基于保留Header的内容拆分XML

时间:2013-08-02 18:48:56

标签: apache-camel

Camel是否可以在XML消息之后进行拆分

<?xml version="1.0" encoding="UTF-8"?>
<MyOrder>
<header>
    ....
</header>
<body>
    <item>
        <itemNumber>10</itemNumber>
        <itemType>A</itemType>
    </item>
    <item>
        <itemNumber>20</itemNumber>
        <itemType>B</itemType>
    </item>
    <item>
        <itemNumber>30</itemNumber>
        <itemType>C</itemType>
    </item>
</body>     
</MyOrder>

以下3个部分:

1)

<?xml version="1.0" encoding="UTF-8"?>
<MyOrder>
<header>
    ....
</header>
<body>
    <item>
        <itemNumber>10</itemNumber>
        <itemType>A</itemType>
    </item>
</body>     
</MyOrder>

2)

<?xml version="1.0" encoding="UTF-8"?>
<MyOrder>
<header>
    ....
</header>
<body>
    <item>
        <itemNumber>20</itemNumber>
        <itemType>B</itemType>
    </item>
</body>     
</MyOrder>

3)

<?xml version="1.0" encoding="UTF-8"?>
<MyOrder>
<header>
    ....
</header>
<body>
    <item>
        <itemNumber>30</itemNumber>
        <itemType>C</itemType>
    </item>
</body>     
</MyOrder>

?注意结果基于 itemType 标记,并且每条消息都具有根本未更改的标头。 Splitter EIP模式可以在这方面提供帮助吗?请在这里分享您的想法!

2 个答案:

答案 0 :(得分:1)

是先设置标题,然后进行拆分。因为每个拆分的消息都有来自用于拆分的父消息的标头的副本。

答案 1 :(得分:0)

所以如果我理解你,你想按项目节点拆分xml文件,按类型对这些节点进行分组(我想你可以有几个类型为A,B,C ......的项目)并生成另一个xml,一个按项目类型? Splitter可以使用xpath表达式,所以我认为你可以使用它,如果你已经知道所有可能的类型。在这种情况下我不知道分割器是否会给你一个唯一的项目节点或与项目类型匹配的注释列表。您可能必须使用agregator将它们重新组合在一起。

但是,我不认为你会有你的标题。你可能需要在流程结束时把它放回去 您的要求有点复杂,拆分器肯定会有所帮助,但这并不简单。

我发现了这个:http://www.davsclaus.com/2011/11/splitting-big-xml-files-with-apache.html