如何在Apache Camel中部分分割xml

时间:2018-09-27 18:33:10

标签: xml apache-camel

我正在尝试使用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转换?

1 个答案:

答案 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)为另一个输出。