Java 将名称从ArrayList写入XML文件

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

我试图将ArrayList中的乘客姓名写入XML文件。我必须将创建XML文档的代码放入我的Aircraft类中。下面是我的飞机等级代码。这还包括我的主要调用方法App.java的代码。这两个类中都没有错误;但是,我有一部分人认为它没有正确地创建XML文件。我想知道是否必须在App.java中的任何位置调用writeNames()方法才能使其正常工作

飞机等级:

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>