【问题标题】:Splitting XML based on it content preserving Header基于它的内容保留Header拆分XML
【发布时间】:2013-08-02 18:48:55
【问题描述】:

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 标签,每条消息的 Header 都没有改变。拆分器 EIP 模式可以在这里提供帮助吗?请在这里分享您的想法!

【问题讨论】:

  • 您对一段进行这种拆分的 java 代码感兴趣吗?

标签: apache-camel


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 2012-04-10
      • 2014-07-22
      • 2021-12-14
      相关资源
      最近更新 更多