在Apache骆驼中将多个XML转换为CSV

时间:2018-08-16 01:38:14

标签: csv apache-camel

我想在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 //
                    }})                  
    ;}


}

1 个答案:

答案 0 :(得分:0)

您必须使用jaxb检查解组后得到的结果

我假设您只得到一个employee,因为您将此结果视为String并用逗号,对其进行了分割。按照我的假设,如果根本没有逗号,则拆分器只会得到一部分:整个输入。

如果jaxb的结果是employee Java集合,您只需告诉Camel

.split(body())

,您就会从拆分器中获得每个单独的employee

如果要在转换后重新收集它们以编写包含XML所有条目的CSV文件,则必须将聚合策略添加到拆分器see here for an example。然后,骆驼将自动重新汇总使用的XML文件的转换后的元素。

很好,不是吗?