Ich versuche, die Namen der Passagiere in einer ArrayList in eine XML-Datei zu schreiben. Ich muss den Code für die Erstellung des XML-Dokuments in meine Aircraft-Klasse einfügen. Unten ist mein Code für die Klasse Aircraft. Dazu gehört auch mein Code für die Hauptaufrufmethode App.java. In keiner dieser Klassen gibt es Fehler. Ein Teil von mir denkt jedoch, dass die XML-Datei nicht korrekt erstellt wird. Ich habe mich gefragt, ob ich die writeNames() -Methode irgendwo in der App.java aufrufen muss, damit sie richtig funktioniert?Name von ArrayList in XML-Datei schreiben
Flugzeugklasse:
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;
}
}
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());
}
}
Warum nicht JAXB verwenden, die von Objekt zu XML fließender Übersetzung erlauben würde, und wieder zurück? –
@HovercraftFullOfEels Ich habe noch nicht gelernt, wie man das macht – javacrazy
Verrückt, betrachten Sie es nachschlagen. Es ist ziemlich flexibel, kraftvoll und einfach nur schlau. –