Java - 将管道和逗号分隔的文件转换为 xml [英] Java - convert pipe and comma delimited file into xml

查看:23
本文介绍了Java - 将管道和逗号分隔的文件转换为 xml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将管道和逗号分隔的文件转换为 xml.我要转换的分隔文件格式为:

I want to convert pipe and comma both delimited file into a xml. The delimited file I am looking to convert is in the format:

   UUID  |  Location |   Name  |  Age, UUID  |    Location   |   Name   | Age
   123   | Bangalore |  Paras  |  23, 234    |    Bangalore  | Varun    |  25

我希望将其转换为:

<data>
  <UUID>123</UUID> 
  <location>Bangalore</location>
  <name> Paras  </name>
  <age> 23</age>
</data>
<data>
  <UUID>234</UUID> 
  <location>Bangalore</location>
  <name> Paras  </name>
  <age> 23</age>
</data>

推荐答案

您需要对输入字符串进行双重解析.下面的示例将帮助您开始.

You need to double parse your input string. Below sample will help you to get going.

import java.io.BufferedOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.StaxDriver;



class Data {
    String UUID;
    String location;
    String name;
    String age;

    public Data(String[] elements){
        int i = 0;
        UUID = elements[i++].trim();
        location = elements[i++].trim();
        name  = elements[i++].trim();
        age = elements[i++].trim();
    }

}

和转换器

public class Convert {

    static final String[] headers = {"UUID","location","name","age"};


    public static void main(String[] args) throws IOException {

        List<Data> dataList = new ArrayList<Data>();
        LineNumberReader r = new LineNumberReader(new FileReader("test.csv"));

        String line = r.readLine();
        while(line != null){
            String[] dataArray = line.split(",");
            for(String record:dataArray){
                String[] elements = record.split("\\|");
                Data data = new Data(elements);
                //If you dont want to accumulate data then you can stream xml out. 
                dataList.add(data);
            }
            line = r.readLine();
        }
        r.close();

        // now use your favorite xml library to stream out. I use xstream. in your case even direct constructing xml seems ok too. 
        XStream xstream = new XStream(new StaxDriver());
        xstream.alias("data", Data.class);
        xstream.toXML(dataList, System.out);

        //if you want formatted xml then use PrettyPrintWriter..
/*      BufferedOutputStream stdout = new BufferedOutputStream(System.out);
        PrettyPrintWriter p = new PrettyPrintWriter(new OutputStreamWriter(stdout));
        xstream.marshal(dataList, p);
*/      
    }

}

我的示例 csv 文件是

My sample csv file is

123|    Bangalore  |  Paras  |  23  , 234    |    Bangalore  | Varun    |  25
456|    Mumbai  |  xyz  |  30  , 999    |    Ahmedabad  | abc    |  28

和输出是

<list>
  <data>
    <UUID>123</UUID>
    <location>Bangalore</location>
    <name>Paras</name>
    <age>23</age>
  </data>
  <data>
    <UUID>234</UUID>
    <location>Bangalore</location>
    <name>Varun</name>
    <age>25</age>
  </data>
  <data>
    <UUID>456</UUID>
    <location>Mumbai</location>
    <name>xyz</name>
    <age>30</age>
  </data>
  <data>
    <UUID>999</UUID>
    <location>Ahmedabad</location>
    <name>abc</name>
    <age>28</age>
  </data>
</list>

这篇关于Java - 将管道和逗号分隔的文件转换为 xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆