2016-06-06 5 views
-2

Ich versuche derzeit herauszufinden, wie Informationen aus einem XML-Tag abgerufen und gespeichert werden. Zu wo kann ich die Daten nach Vornamen sortieren. Bis jetzt bin ich dahin gekommen, wo mein Programm die Daten parsen und lesen würde. Aber ich kann nicht herausfinden, wie man die Daten tatsächlich speichert. Ich konnte nicht herausfinden, wie Informationen aus den Kind-Tags zu bekommen, so dass alle Hilfe geschätzt wird.Speichern von Informationen aus einem XML mit Hilfe von Java

<?xml version="1.0" encoding="UTF-8"?> 
<abc targetNamespace="http://www.example.com/abcd"> 
<abcd> 
    <employeeList> 
     <employee> 
      <name> 
       <last>Bob</last> 
       <first>John</first> 
      </name> 
      <title>Merchant</title> 
      <phone>9987583687</phone> 
     </employee> 

     <employee> 
      <name> 
       <last>Roy</last> 
+0

Bitte bearbeiten Sie Ihre Frage, um eine [mcve] einzuschließen. –

+0

Sagen Sie uns, was Sie bereits versucht haben und was nicht funktioniert. Http://stackoverflow.com/help/how-to-ask –

+0

Möchten Sie die Informationen in ein Mitarbeiterobjekt extrahieren? – Peter

Antwort

2

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

Verwandte Themen