我正在尝试使用Apache Camel拆分这种xml。
输入xml
(a, b) :> [(a, b) :> [(a, b) :> []], (a,b) :> []]
输出xml
<root>
<header>
<...>
</header>
<body>
<data> one </data>
<data> two </data>
</body>
</root>
和
<root>
<header>
<...>
</header>
<body>
<data> one </data>
</body>
</root>
我一直在搜索,找不到适合的示例。是否可以仅使用骆驼分割器图案?还是我必须先应用一些xslt转换?
答案 0 :(得分:1)
非常感谢Screwtape。我发现这将适用于问题中的示例。基本上“ w”模式将保留所有父/祖父母上下文。 http://camel.apache.org/splitter.html#Splitter-StreamingbigXMLpayloadsusingTokenizerlanguage
Namespaces ns = new Namespaces("ns1", "");
from("direct:a")
.split().xtokenize("//ns1:root/body/data", 'w', ns)
.streaming()
.to("direct:b")
对于单元测试(扩展了CamelTestSupport),
MockEndpoint mockend; // needs some setup by overriding the createRouteBuilder() method.
mockend.getExchanges().get(0).getIn().getBody().toString()
将为您提供问题中的输出之一,而get(1)为另一个输出。