简体   繁体   English

将 CSV 文件转换为 JAVA 中的层次结构 XML 与 ZAB6632D55A4B3743FA21DAF85F26

[英]Converting CSV File to Hierarchy XML in JAVA with JAXB

I need to create a Hierarchical XML using CSV file.我需要使用 CSV 文件创建一个分层 XML 文件。

id,firstname,Lastname
1,yong,mook kim
2, Alez, Aunritod
,...

I tried to do it with JAXB and create the classes manually我尝试使用 JAXB 来完成并手动创建类

public class WriteXMLFile {

    public static void main(String argv[]) {

      try {

        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        // root elements
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement("company");
        doc.appendChild(rootElement);

        // staff elements
        Element staff = doc.createElement("Staff");
        rootElement.appendChild(staff);

        // set attribute to staff element
        Attr attr = doc.createAttribute("id");
        attr.setValue("1");
        staff.setAttributeNode(attr);

        Element firstname = doc.createElement("firstname");
        firstname.appendChild(doc.createTextNode("yong"));
        staff.appendChild(firstname);

        // lastname elements
        Element lastname = doc.createElement("lastname");
        lastname.appendChild(doc.createTextNode("mook kim"));
        staff.appendChild(lastname);

But my issue is that I want to read the Value of each node from my csv file not manually in the code但我的问题是我想从我的 csv 文件中读取每个节点的值,而不是在代码中手动

        Element firstname = doc.createElement("firstname");
        firstname.appendChild(doc.createTextNode("yong"));
        staff.appendChild(firstname);

Can anyone help me how can I read it from my sample.csv file instead of manually?谁能帮助我如何从我的 sample.csv 文件而不是手动读取它?

try with following solution,尝试以下解决方案,

firstly read the csv file and collect the objects (person) from individual lines.首先读取 csv 文件并从各个行收集对象(人)。 then marshal the list of objects to xml file然后将对象列表编组到 xml 文件

People.java (root element of xml file) People.java(xml 文件的根元素)

@XmlRootElement(name="people")
@XmlAccessorType (XmlAccessType.FIELD)
public class People {

    @XmlElement(name="person")
    private List<Person> listPerson;

    public List<Person> getListPerson() {
        return listPerson;
    }
    public void setListPerson(List<Person> listPerson) {
        this.listPerson = listPerson;
    }
}

Person.java (child elements of parent (people) element) Person.java(父(人)元素的子元素)

@XmlRootElement(name="person")
@XmlAccessorType (XmlAccessType.FIELD)
public class Person {

    private String id;
    private String firstName;
    private String lastName;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

marshaling with java与 java 编组

public class Marshaller {

    public static void main(String[] args) {

        BufferedReader br;
        String line;
        People people = new People();
        ArrayList<Person> list = new ArrayList();

        //read the csv file and collect the person objects
        try {
            br = new BufferedReader(new FileReader("inputCSV.csv"));
            while ((line = br.readLine()) != null) {    //get every single line individually in csv file
                String[] value = line.split(",");   //collect the comma separated values into array
                Person person = new Person();
                person.setId(value[0]); //first element of an array is id
                person.setFirstName(value[1]);  //second element of an array is firstName
                person.setLastName(value[2]);   //third element of an array is lastName
                list.add(person);   //add person object into the list
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        people.setListPerson(list); //set person object list to people
        people.getListPerson().remove(0);   //remove the first person object of list. because it holds the column's names

        //marshaling with java
        try {

            JAXBContext jaxbContext = JAXBContext.newInstance(People.class);
            javax.xml.bind.Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
            jaxbMarshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, true);
            jaxbMarshaller.marshal(people, new File("output.xml"));
            jaxbMarshaller.marshal(people, System.out);

        } catch (JAXBException e) {
            e.printStackTrace();
        }

    }
}

inputCSV.csv输入CSV.csv

id,firstname,Lastname
1,yong,mook kim
2, Alez, Aunritod

output.xml output.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<people>
    <person>
        <id>1</id>
        <firstName>yong</firstName>
        <lastName>mook kim</lastName>
    </person>
    <person>
        <id>2</id>
        <firstName> Alez</firstName>
        <lastName> Aunritod</lastName>
    </person>
</people>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM