gpt4 book ai didi

java - 使用 JAXB 将 CSV 文件转换为 JAVA 中的层次结构 XML

转载 作者:行者123 更新时间:2023-12-02 08:40:57 24 4
gpt4 key购买 nike

我需要使用 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 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();
}

}
}

输入CSV.csv

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

输出.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>

关于java - 使用 JAXB 将 CSV 文件转换为 JAVA 中的层次结构 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61392923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com