Java 将名称从ArrayList写入XML文件
我试图将ArrayList中的乘客姓名写入XML文件。我必须将创建XML文档的代码放入我的Aircraft类中。下面是我的飞机等级代码。这还包括我的主要调用方法App.java的代码。这两个类中都没有错误;但是,我有一部分人认为它没有正确地创建XML文件。我想知道是否必须在App.java中的任何位置调用writeNames()方法才能使其正常工作 飞机等级:Java 将名称从ArrayList写入XML文件,java,xml,class,Java,Xml,Class,我试图将ArrayList中的乘客姓名写入XML文件。我必须将创建XML文档的代码放入我的Aircraft类中。下面是我的飞机等级代码。这还包括我的主要调用方法App.java的代码。这两个类中都没有错误;但是,我有一部分人认为它没有正确地创建XML文件。我想知道是否必须在App.java中的任何位置调用writeNames()方法才能使其正常工作 飞机等级: import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class Aircraft {
private double maxSpeed;
private int maxPassengers;
private int numEngines;
private Pilot pilot;
private Stewardess stewardess;
private ArrayList<Passenger> passengers;
Aircraft(double maxSpeed, int maxPassengers, int numEngines, Pilot pilot,
Stewardess stewardess, ArrayList<Passenger> passengers)
{
this.pilot = pilot;
this.stewardess = stewardess;
this.passengers = passengers;
this.maxSpeed = maxSpeed;
this.maxPassengers = maxPassengers;
this.numEngines = numEngines;
}
public String getInfo()
{
return "Aircraft" + "\n" + "Max Speed: " + this.maxSpeed + " mph " + "\n" +
"Max Passengers: " + this.maxPassengers + " passengers " + "\n" + "Number of Engines: " +
this.numEngines + " engines" + "\n" + "\n" + this.pilot.getInfo() + "\n" + "\n" + "Stewardess"
+ this.stewardess.getInfo() + "\n" + "\n" + "Passenger 1" + passengers.get(0).getInfo() + "\n"+ "\n" + "Passenger 2"
+ passengers.get(1).getInfo() + "\n" + "\n" + "Passenger 3" + passengers.get(2).getInfo() + "\n" + "\n" + "Passenger 4"
+ passengers.get(3).getInfo();
}
public ArrayList<String> writeNames(ArrayList<String> passengers)
{
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element xmlRoot = document.createElement("Passengers");
document.appendChild(xmlRoot);
Element passenger;
Element name;
//passenger1
passenger = document.createElement("Passenger");
passenger.setAttribute("id", "1");
name = document.createElement("Name");
name.appendChild(document.createTextNode(passengers.get(0)));
passenger.appendChild(name);
xmlRoot.appendChild(passenger);
//passenger2
passenger = document.createElement("Passenger");
passenger.setAttribute("id", "2");
name = document.createElement("Name");
name.appendChild(document.createTextNode(passengers.get(1)));
passenger.appendChild(name);
xmlRoot.appendChild(passenger);
//passenger3
passenger = document.createElement("Passenger");
passenger.setAttribute("id", "3");
name = document.createElement("Name");
name.appendChild(document.createTextNode(passengers.get(2)));
passenger.appendChild(name);
xmlRoot.appendChild(passenger);
//passenger4
passenger = document.createElement("Passenger");
passenger.setAttribute("id", "4");
name = document.createElement("Name");
name.appendChild(document.createTextNode(passengers.get(3)));
passenger.appendChild(name);
xmlRoot.appendChild(passenger);
//Write document to file
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult("src/passengers.xml");
transformer.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
}
return passengers;
}
import java.util.ArrayList;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.transform.OutputKeys;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
公共级飞机{
私人双maxSpeed;
私人旅客;
私人内部网络;
私人飞行员;
私人空姐;
私人旅客;
飞机(双倍最大速度、整型最大乘客、整型发动机、飞行员、,
空姐(空姐,ArrayList乘客)
{
this.pilot=pilot;
this.stewardesh=空姐;
这个。乘客=乘客;
this.maxSpeed=maxSpeed;
this.maxPassengers=maxPassengers;
this.numEngines=numEngines;
}
公共字符串getInfo()
{
返回“飞机”+“\n”+“最大速度”:+this.maxSpeed+“mph”+“\n”+
“最大乘客数:”+this.maxparters+“乘客数”+“\n”+“发动机数:”+
this.numEngines+“engines”+“\n”+“\n”+this.pilot.getInfo()+“\n”+“\n”+“空中小姐”
+this.stewardes.getInfo()+“\n”+“\n”+“乘客1”+乘客.get(0).getInfo()+“\n”+“\n”+“乘客2”
+乘客。获取(1)。getInfo()+“\n”+“\n”+“乘客3”+乘客。获取(2)。getInfo()+“\n”+“\n”+“乘客4”
+乘客。get(3)。getInfo();
}
公共ArrayList WriteName(ArrayList乘客)
{
试一试{
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
文档生成器;
builder=factory.newDocumentBuilder();
Document Document=builder.newDocument();
元素xmlRoot=document.createElement(“乘客”);
document.appendChild(xmlRoot);
元素乘客;
元素名称;
//乘客1
乘客=document.createElement(“乘客”);
乘客属性(“id”、“1”);
名称=document.createElement(“名称”);
name.appendChild(document.createTextNode(passwords.get(0));
乘客:儿童(姓名);
xmlRoot.appendChild(乘客);
//乘客2
乘客=document.createElement(“乘客”);
乘客属性(“id”、“2”);
名称=document.createElement(“名称”);
name.appendChild(document.createTextNode(patients.get(1));
乘客:儿童(姓名);
xmlRoot.appendChild(乘客);
//乘客3
乘客=document.createElement(“乘客”);
乘客属性(“id”、“3”);
名称=document.createElement(“名称”);
name.appendChild(document.createTextNode(passwords.get(2));
乘客:儿童(姓名);
xmlRoot.appendChild(乘客);
//乘客4
乘客=document.createElement(“乘客”);
乘客属性(“id”、“4”);
名称=document.createElement(“名称”);
name.appendChild(document.createTextNode(patients.get(3));
乘客:儿童(姓名);
xmlRoot.appendChild(乘客);
//将文档写入文件
TransformerFactory transFactory=TransformerFactory.newInstance();
变压器=transFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT,“是”);
DOMSource=新的DOMSource(文档);
StreamResult=newstreamresult(“src/passengers.xml”);
变换(源、结果);
}捕获(例外e){
e、 printStackTrace();
}
返程旅客;
}
}
App.java:
import java.util.ArrayList;
public class App {
public static void main(String[] args) {
//Four roommates that share same address, have different suitcases, traveling to different destinations
Address address = new Address("University Park", "PA", "16802");
Suitcase suitcase1 = new Suitcase(7, 75, "Carry Strap");
Suitcase suitcase2 = new Suitcase(5, 70, "No Carry Strap");
Suitcase suitcase3 = new Suitcase(4, 60, "No Carry Strap");
Suitcase suitcase4 = new Suitcase(8, 55, "Carry Strap");
//Stewardess Info
Suitcase suitcaseStewardess = new Suitcase(4, 40, "No Carry Strap");
Address addressStewardess = new Address("Doylestown", "PA", "18902");
Stewardess stewardess = new Stewardess(4, "Full Time", 40, suitcaseStewardess, addressStewardess);
//Pilot Info
Suitcase suitcasePilot = new Suitcase(10, 50, "Carry Strap");
Address addressPilot = new Address("Raliegh", "NC", "27513");
Map map = new Map(14000.5, "United States", "Northeast");
Pilot pilot = new Pilot(7, 40, "Perfect", suitcasePilot, map, addressPilot);
//Passenger Info
ArrayList<Passenger> passengers = new ArrayList<>();
passengers.add(new Passenger("Luke Harding", 1400, "England", "First Class - A14", suitcase1, address));
passengers.add(new Passenger("Dalton Sydnor", 1000, "Mexico", "First Class - G7", suitcase2, address));
passengers.add(new Passenger("Ian Smithgall", 700, "Russia", "First Class - C4", suitcase3, address));
passengers.add(new Passenger("Matt Yohe", 850, "Indiana", "First Class - B1", suitcase4, address));
//Aircraft Info
Aircraft aircraft = new Aircraft (750, 400, 4, pilot, stewardess, passengers);
System.out.println(aircraft.getInfo());
}
import java.util.ArrayList;
公共类应用程序{
公共静态void main(字符串[]args){
//四个室友共用同一个地址,有不同的手提箱,去不同的目的地旅行
地址=新地址(“大学公园”、“PA”、“16802”);
行李箱1=新行李箱(7,75,“背带”);
行李箱2=新行李箱(5,70,“无背带”);
行李箱3=新行李箱(4,60,“无背带”);
行李箱4=新行李箱(8,55,“携带带”);
//空姐信息
行李箱空姐=新行李箱(4,40,“无携带带”);
地址空姐=新地址(“Doylestown”、“PA”、“18902”);
空姐=新空姐(4,“全职”,40,手提箱空姐,地址空姐);
//飞行员信息
行李箱飞行员=新行李箱(10,50,“携带带”);
地址PILOT=新地址(“Raliegh”、“NC”、“27513”);
地图=新地图(14000.5,“美国”、“东北”);
飞行员飞行员=新飞行员(7,40,“完美”,手提箱飞行员,地图,地址飞行员);
//乘客信息
ArrayList=新的ArrayList();
乘客。添加(新乘客(“Luke Harding”,1400,“英格兰”,“头等舱-A14”,行李箱1,地址));
乘客。添加(新乘客(“道尔顿悉尼”,1000,“墨西哥”,“头等舱-G7”,行李箱2,地址));
乘客。添加(新乘客(“伊恩·史密格尔”,700,“俄罗斯”,“头等舱-C4”,行李箱3,地址));
乘客。添加(新乘客(“Matt Yohe”,850,“印第安纳州”,“头等舱-B1”,行李箱4,地址));
//飞机信息
飞机
public ArrayList<String> writeNames()
aircraft.writeNames()
@XmlRootElement(name = "person")
@XmlAccessorType(XmlAccessType.FIELD)
class Person { // base class
@XmlElement(name = "first_name")
private String firstName;
@XmlElement(name = "last_name")
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public Person() {
// Default constructors are required
}
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;
}
@Override
public String toString() {
return "Person [firstName=" + firstName + ", lastName=" + lastName + "]";
}
}
@XmlRootElement(name = "teacher")
@XmlAccessorType(XmlAccessType.FIELD)
class Teacher extends Person {
@XmlElement(name = "grade_level")
private String gradeLevel;
public Teacher(String firstName, String lastName, String gradeLevel) {
super(firstName, lastName);
this.gradeLevel = gradeLevel;
}
public Teacher() {
// Default constructors are required
}
public String getGradeLevel() {
return gradeLevel;
}
public void setGradeLevel(String gradeLevel) {
this.gradeLevel = gradeLevel;
}
@Override
public String toString() {
return "Teacher [gradeLevel=" + gradeLevel + ", getFirstName()=" + getFirstName() + ", getLastName()="
+ getLastName() + "]";
}
}
@XmlRootElement(name = "student")
@XmlAccessorType(XmlAccessType.FIELD)
class Student extends Person {
@XmlElement(name = "age")
private int age;
public Student(String firstName, String lastName, int age) {
super(firstName, lastName);
this.age = age;
}
public Student() {
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [age=" + age + ", getFirstName()=" + getFirstName() + ", getLastName()=" + getLastName() + "]";
}
}
@XmlRootElement(name = "class_room")
@XmlType(propOrder = {"teacher", "maxStudents", "students"})
@XmlAccessorType(XmlAccessType.FIELD)
class ClassRoom {
@XmlElementRef
private Teacher teacher;
@XmlElementWrapper(name = "students")
@XmlElement(name = "student")
private List<Student> students = new ArrayList<>();
@XmlElement(name = "max_students")
int maxStudents;
public ClassRoom(Teacher teacher, int maxStudents) {
this.teacher = teacher;
this.maxStudents = maxStudents;
}
public ClassRoom() {
}
public void addStudent(Student student) {
students.add(student);
}
public List<Student> getStudents() {
return students;
}
public Teacher getTeacher() {
return teacher;
}
public int getMaxStudents() {
return maxStudents;
}
@Override
public String toString() {
return "ClassRoom [teacher=" + teacher + ", students=" + students + ", maxStudents=" + maxStudents + "]";
}
}
// create and fill my class room
ClassRoom classRoom = new ClassRoom(new Teacher("John", "Smith", "Four"), 30);
classRoom.addStudent(new Student("Bill", "Jones", 11));
classRoom.addStudent(new Student("Cathy", "Franks", 12));
classRoom.addStudent(new Student("Henry", "Rotter", 11));
classRoom.addStudent(new Student("Barry", "Edwards", 11));
classRoom.addStudent(new Student("Daffy", "Duck", 10));
classRoom.addStudent(new Student("Mickey", "Mouse", 11));
classRoom.addStudent(new Student("Donald", "Trump", 11));
try {
// marshall to XML
JAXBContext context = JAXBContext.newInstance(ClassRoom.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(classRoom, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<class_room>
<teacher>
<first_name>John</first_name>
<last_name>Smith</last_name>
<grade_level>Four</grade_level>
</teacher>
<max_students>30</max_students>
<students>
<student>
<first_name>Bill</first_name>
<last_name>Jones</last_name>
<age>11</age>
</student>
<student>
<first_name>Cathy</first_name>
<last_name>Franks</last_name>
<age>12</age>
</student>
<student>
<first_name>Henry</first_name>
<last_name>Rotter</last_name>
<age>11</age>
</student>
<student>
<first_name>Barry</first_name>
<last_name>Edwards</last_name>
<age>11</age>
</student>
<student>
<first_name>Daffy</first_name>
<last_name>Duck</last_name>
<age>10</age>
</student>
<student>
<first_name>Mickey</first_name>
<last_name>Mouse</last_name>
<age>11</age>
</student>
<student>
<first_name>Donald</first_name>
<last_name>Trump</last_name>
<age>11</age>
</student>
</students>
</class_room>