gpt4 book ai didi

java - Apache Camel - 按元素大小拆分 xml 文件(每个文件的最大元素)

转载 作者:行者123 更新时间:2023-12-01 22:33:33 25 4
gpt4 key购买 nike

我想分割xml文件。

原始文件:

<home>
<address>a1</address>
<address>a2</address>
<address>a3</address>
<address>a4</address>
....
....
<address>an</address>
</home>

举个例子,我想将上面的 xml 文件拆分为每个文件中的 2 个地址元素。

文件1:

<home>
<address>a1</address>
<address>a2</address>
</home>

文件2:

<home>
<address>a1</address>
<address>a2</address>
</home>

...

文件m:

<home>
<address>a(n-1)</address>
<address>an</address>
</home>

我尝试如下。但我无法得到预期的结果。

from("file:///home/tharanga/task2/input?noop=true&delete=true")
.split(xpath("home/address"))
.streaming()
.aggregate(AggregationStrategies.groupedExchange())
.constant(true)
.completionSize(2)
.completionTimeout(1000)
.to("file:///home/tharanga/task2/output2");

非常感谢您帮助解决此问题。

最佳答案

groupedExcange聚合策略会将交易所组合成一个列表,因此您必须对它们进行额外的处理。为了使其更简单,我建议您添加 .convertBodyTo(String.class)并且还使用 GroupedBodyAggregationStrategy而不是GroupedExchangeAggregationStrategy获得 List<String>作为聚合的结果。

假设你的处理器看起来像这样

.process(new Processor()) {
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody().join();
StringBuilder sb = new StringBuilder();
sb.append("<home>");
sb.append(body);
sb.append("</home>");
exchange.getIn().setBody(sb.toString());
}
})

关于java - Apache Camel - 按元素大小拆分 xml 文件(每个文件的最大元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58539226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com