2016-03-30 9 views
-1

ich ein Objekt haben Schüler genannt wie diesesXML-Datei mit dem gleichen Element wie Kind und Eltern zu lesen und auf das Objekt

class Student{ 
    int a; 
    String name; 
    List<Student> childStudents; 
} 

und meine xml sieht wie folgt aus

<root> 
    <student> 
     <a>1</a> 
     <name>ABC</name> 
    </student> 
    <student> 
     <a>2</a> 
     <name>XYZ</name> 
     <student> 
      <a>3</a> 
      <name>PQR</name> 
     </student> 
    </student> 
</root> 

Nun, was ich will, ist lese das XML und fülle die Werte zu den Studentenobjekten, im ersten Studentenobjekt gemäß XML habe nur die Werte "a" und "name" nur es hat keine Liste der untergeordneten Schüler, aber im zweiten Element in xml hat "a, name" und Kind Student, die gleiche wie Eltern Objekt Student "a, Name und Liste der Schüler", so was ich will, ist wie pro Xml-Wert s füllen die Objekte mit ersten studnet wie dieses

Student 
[ a =1 
    name = "ABC" 
    listofStudents = null; 
] 

und zweiten Objekt wie diese

Student 
[ a =2 
    name = "XYZ" 
    listofStudents = (size)1; 
      Student[ 
       a = 3 
       name = "PQR" 
       listofStudents = null; 
      ] 
] 

Any One gleichen hat fügen Sie bitte Link, ist Extrakt Szenario nicht nur gleiche Probe vereinfachte Weise, die ich in dem genannten Frage zu bekommen verstehen

ich habe versucht, so etwas wie dieses

public void A(){ 
    nodeList = doc.getElementsByTagName("student"); 
    for (int msgIndex = 0; msgIndex < nodeList.getLength(); msgIndex++) { 
      Node message = nodeList.item(msgIndex); 
      if (message.getNodeType() == Node.ELEMENT_NODE) { 

       Element eElement = (Element) message; 
       String msgName = eElement.getAttribute("a"); 
       String msgCateg = eElement.getAttribute("name"); 


       Student msg = new Student(); 
       msg.setMsgName(msgName); 
       msg.setMsgA(msgCateg);    

      } 
     } 
} 

2. Versuch für Lösung, die ich versuchte, war

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by sadeeshal on 3/30/2016. 
*/ 
public class Book { 

    String author; 
    double price; 
    String pubdate; 
    List<Book> listOfBooks = new ArrayList<Book>(); 

    public void addBookToList(Book b) { 
     getListOfBooks().add(b); 
    } 

    public String getAuthor() { 
     return author; 
    } 

    public void setAuthor(String author) { 
     this.author = author; 
    } 

    public double getPrice() { 
     return price; 
    } 

    public void setPrice(double price) { 
     this.price = price; 
    } 

    public String getPubdate() { 
     return pubdate; 
    } 

    public void setPubdate(String pubdate) { 
     this.pubdate = pubdate; 
    } 

    public List<Book> getListOfBooks() { 
     return listOfBooks; 
    } 

    public void setListOfBooks(List<Book> listOfBooks) { 
     this.listOfBooks = listOfBooks; 
    } 
} 

und XML lesen

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import java.io.File; 
import java.util.ArrayList; 

/** 
* Created by sadeeshal on 3/30/2016. 
*/ 
public class XML { 

    public static void main(String[] args) { 
     XML xml = new XML(); 
     xml.readXML(); 
    } 

    public void readXML(){ 

     try { 
      File file = new File("C:/Users/sadeeshal/Downloads/A.xml"); 
      DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
      Document doc = dBuilder.parse(file); 
      doc.getDocumentElement().normalize(); 

      NodeList nodeList = doc.getElementsByTagName("book"); 
      Book bookParent = new Book(); 
      read(nodeList, bookParent); 

     } catch (Exception e) { 
      System.out.print(e.getMessage()); 
     } 
    } 

    public void read(NodeList nList,Book bookParent){ 
     for (int temp = 0; temp < nList.getLength(); temp++) { 
      Node nNode = nList.item(temp); 
      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
       Element eElement = (Element) nNode; 
       String name = eElement.getElementsByTagName("author").item(0).getTextContent(); 
       String pric = eElement.getElementsByTagName("price").item(0).getTextContent(); 
       String pub = eElement .getElementsByTagName("pubdate").item(0).getTextContent(); 

       Book book = new Book(); 
       book.setAuthor(name); 
       book.setPrice(Double.parseDouble(pric)); 
       book.setPubdate(pub); 

       if(nNode.hasChildNodes()){ 
        read(((Element) nNode).getElementsByTagName("book"),book); 
        bookParent.addBookToList(book); 
       } 
      } 
     } 
    } 
} 

XML Datei

<?xml version="1.0"?> 
<books> 
    <book> 
     <author>Carson</author> 
     <price>31.95</price> 
     <pubdate>05/01/2001</pubdate> 
     <book> 
      <author>CarsonCild</author> 
      <price>1.95</price> 
      <pubdate>05/01/2011</pubdate> 
     </book> 
    </book> 
    <book> 
      <author>CarsonTwo</author> 
      <price>30.95</price> 
      <pubdate>05/01/2101</pubdate> 
    </book> 
</books> 

und es wurde geladen, wie

enter image description here

folgt

Aber was muss eigentlich passieren wird, ist nicht wie carsonChild img nur einzelnes Objekt unter dem Array von listofbooks nicht an einem übergeordneten

+0

Was ist die Frage? kannst du es umschreiben, um klar zu machen, was du verlangst? –

+0

Hallo @ PedroG.Dias überprüfen Sie bitte jetzt – Razor

+0

ich so etwas wie dies versucht haben, in der Frage es selbst erwähnt. Duno, wie man Unterschüler korrekt liest und es an Elternschüler setzt – Razor

Antwort

0

Bei ReadXML Durch die Verwendung der Ebenen dieses Problem behoben werden kann. (Lösung für 2.), so sollte automatisch erhalten die erste als auch feste

XPathFactory xpathFactory = XPathFactory.newInstance(); 
      XPath xpath = xpathFactory.newXPath(); 
      NodeList links = (NodeList) xpath.evaluate("books/book", doc, XPathConstants.NODESET); 

enter image description here

Siehe die Befestigung der Objekterstellung

Verwandte Themen