我想在apache骆驼中将多个xml对象转换为csv对象。但是我只能够转换单个对象。参考以下内容和附加的代码,我尝试了一些方法sI拥有这样的xml文件
<company>
<employee>
<empId>1</empId>
<empName>peter</empName>
<sal>56000</sal>
</employee>
<employee>
<empId>2</empId>
<empName>mary</empName>
<sal>96000</sal>
</employee>
<employee>
<empId>3</empId>
<empName>alex</empName>
<sal>96000</sal>
</employee>
并希望将其转换为csv。但是我只能转换一个数据,但是我不知道如何更改整个数据集
@Override
public void configure() throws Exception {
// Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
JaxbDataFormat xmlDataFormat = new JaxbDataFormat(); //1. XML Data Format
JAXBContext con = JAXBContext.newInstance(company.class);
xmlDataFormat.setContext(con);
DataFormat csv = new BindyCsvDataFormat(employee.class);
from("file:C:/inputFolder/.camel/xml?noop=true")
.unmarshal(xmlDataFormat)
.split(body(String.class).tokenize(","))
//Unmarshaled debug part
.process(new Processor(){
public void process(Exchange exchange) throws Exception {
//print string //
String myString = exchange.getIn().getBody(String.class);
System.out.println("unmarshalled output" + myString);
//print string//
//print array //
// Message msg =exchange.getIn() ;
// ArrayList<Employee> list = msg.getBody(ArrayList.class);
//list.forEach(emp -> System.out.println(emp));
//print array //
//// }}
}})
//Unmarshaled debug part
.marshal(csv)
.to("file:C:/outputFolder/csv").
// Marshalled output
process(new Processor(){
public void process(Exchange exchange) throws Exception {
//print string//
String myString = exchange.getIn().getBody(String.class);
System.out.println("marshalled output" + myString);
//print string//
//print array //
//Message msg =exchange.getIn() ;
// ArrayList<Employee> list = msg.getBody(ArrayList.class);
// list.forEach(emp -> System.out.println(emp));
//print array //
}})
;}
}
答案 0 :(得分:0)
您必须使用jaxb检查解组后得到的结果。
我假设您只得到一个employee
,因为您将此结果视为String并用逗号,
对其进行了分割。按照我的假设,如果根本没有逗号,则拆分器只会得到一部分:整个输入。
如果jaxb的结果是employee
的 Java集合,您只需告诉Camel
.split(body())
,您就会从拆分器中获得每个单独的employee
。
如果要在转换后重新收集它们以编写包含XML所有条目的CSV文件,则必须将聚合策略添加到拆分器see here for an example。然后,骆驼将自动重新汇总使用的XML文件的转换后的元素。
很好,不是吗?