Как частично разделить XML в Apache Camel - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь разделить этот вид XML с помощью Apache Camel.

ввод xml

<root> 
  <header> 
    <...> 
  </header> 
  <body> 
    <data> one </data>
    <data> two </data>
  </body> 
</root> 

вывод xml

<root> 
  <header> 
    <...> 
  </header> 
  <body> 
    <data> one </data>  
  </body> 
</root> 

и

<root> 
  <header> 
    <...> 
  </header> 
  <body> 
    <data> two </data>
  </body> 
</root> 

Я искал вокруг и не мог найти пример для этого.Можно ли использовать только сплиттер Camel?Или мне сначала нужно применить какое-нибудь преобразование xslt?

1 Ответ

0 голосов
/ 27 сентября 2018

Большое спасибо 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) другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...