使用JAXB在JAVA中将CSV文件转换为层次结构XML
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JAXB在JAVA中将CSV文件转换为层次结构XML相关的知识,希望对你有一定的参考价值。
我需要使用CSV文件创建层次结构XML。
id,firstname,Lastname
1,yong,mook kim
2, Alez, Aunritod
,...
我尝试使用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);
但是我的问题是我想从我的csv文件中读取每个节点的值,而不是在代码中手动进行此操作
Element firstname = doc.createElement("firstname");
firstname.appendChild(doc.createTextNode("yong"));
staff.appendChild(firstname);
有人可以帮助我如何从sample.csv文件中读取而不是手动读取?
答案
尝试以下解决方案,
首先读取csv文件,并从各行中收集对象(人)。然后将对象列表编组到xml文件
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(父(人)元素的子元素)
@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;
使用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. because it hold 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
id,firstname,Lastname
1,yong,mook kim
2, Alez, Aunritod
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>
以上是关于使用JAXB在JAVA中将CSV文件转换为层次结构XML的主要内容,如果未能解决你的问题,请参考以下文章
在 Java Spring Boot 中将 CSV 转换为 JSON 数组