Haben Sie JAXB (Java Architecture for Xml Binding) in Betracht gezogen?
Es gibt eine Reihe von Tutorials zur Verfügung, wie: https://docs.oracle.com/javase/tutorial/jaxb/intro/examples.html
Blaise Doughan hat auch einige ausgezeichnete Ressourcen auf seinem Blog und Stackoverflow Konto in Bezug auf JAXB: http://blog.bdoughan.com/
Als schnelle Einführung ich eine gemacht Beispiel basierend auf dem XML, das Sie in der Frage angegeben haben. Angenommen, Sie haben Domain-Objekte, die Sie auch die Informationen aus der XML speichern möchten, können Sie Anmerkungen verwenden, um sie kompatibel zu machen:
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;
@XmlRootElement
public class EmployeeList {
private List<Employee> employees = new ArrayList<>();
public EmployeeList(){}
public EmployeeList(List<Employee> employees){
this.employees = employees;
}
public List<Employee> getEmployees(){ return this.employees; }
public void setEmployees(List<Employee> employees){ this.employees = employees; }
}
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Employee {
private Name name;
private String title, phoneNumber;
public Employee(){ }
public Employee(Name name, String title, String phoneNumber){
this.name = name;
this.title = title;
this.phoneNumber = phoneNumber;
}
public Name getName(){ return this.name; }
public String getTitle(){ return this.title; }
public String getPhoneNumber(){ return this.phoneNumber; }
public void setName(Name name){ this.name = name; }
public void setTitle(String title){ this.title = title; }
public void setPhoneNumber(String phoneNumber){ this.phoneNumber = phoneNumber; }
}
public class Name {
private String firstName, lastName;
public Name(){ }
public Name(String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName(){ return this.firstName; }
public String getLastName(){ return this.lastName; }
public void setFirstName(String firstName){ this.firstName = firstName; }
public void setLastName(String lastName){ this.lastName = lastName; }
}
Diese kleinen Änderungen erlauben Sie Ihre Objekte und von xml
zu konvertieren
Beispiel in XML konvertieren
List<Employee> employees = new ArrayList<>();
employees.add(new Employee(new Name("John", "Doe"), "Assistant", "123"));
employees.add(new Employee(new Name("Jane", "Doe"), "Merchant", "456"));
EmployeeList employeeList = new EmployeeList(employees);
try {
File outputFile = new File("employeeListExample.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(EmployeeList.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(employeeList, outputFile);
} catch (PropertyException exception) {
exception.printStackTrace();
} catch (JAXBException exception) {
exception.printStackTrace();
}
Welche der folgenden liefert:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employeeList>
<employees>
<name>
<firstName>John</firstName>
<lastName>Doe</lastName>
</name>
<phoneNumber>123</phoneNumber>
<title>Assistant</title>
</employees>
<employees>
<name>
<firstName>Jane</firstName>
<lastName>Doe</lastName>
</name>
<phoneNumber>456</phoneNumber>
<title>Merchant</title>
</employees>
</employeeList>
Anmerkung: Als Mitarbeiter ist auch ein Root-Element können ein einzelnen Mitarbeiter auch durch Änderung der Klasseninstanz
Beispiel aus XML-Umwandlung verwendet rangieren:
File outputFile = new File("employeeListExample.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(EmployeeList.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
EmployeeList list = (EmployeeList)jaxbUnmarshaller.unmarshal(outputFile);
Verwenden des erstellten xml oben und mit einigen kleinen Änderungen, können wir das XML zurück in die EmployeeList konvertieren, die verwendet wurde, um es zu erstellen (versuchen/fangen immer noch erforderlich) Mit diesem Ansatz können Sie dann Ihre Sortierung auf die u anwenden nmarshalled Liste.
Während diese Antwort nicht perfekt mit Ihrem XML übereinstimmt, wird es Ihnen hoffentlich etwas zum Experimentieren geben mit
Bitte bearbeiten Sie Ihre Frage, um eine [mcve] einzuschließen. –
Sagen Sie uns, was Sie bereits versucht haben und was nicht funktioniert. Http://stackoverflow.com/help/how-to-ask –
Möchten Sie die Informationen in ein Mitarbeiterobjekt extrahieren? – Peter