2016-12-12 1 views
0

Ich mag würde Daten aus XML lesen, aber ich habe einen Fehler:lesen XML-Datei in der Java-

node cannot be converted to element

Was ist das Problem? Hier ist der gesamte Code:

public class ReadXML { 
    public static void main(String[] args) throws Exception{ 

     File xmlFile = new File("C:\\XML\\data.xml"); 

     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
     org.w3c.dom.Document document = documentBuilder.parse(xmlFile); 

     NodeList list = document.getElementsByTagName("Developer"); 

     for (int i = 0; i < list.getLength(); i++) { 

      Node node = list.item(i); 

      if (node.getNodeType() == Node.ELEMENT_NODE) { 

       Element element = (Element) node; 

       System.out.println("ID: " + element.getAttribute("ID")); 
       System.out.println("Name: " + element.getElementsByTagName("Name").item(0).getTextConcent()); 
       System.out.println("Surname: " + element.getElementsByTagName("Surname").item(0).getTextConcent()); 
       System.out.println("Age: " + element.getElementsByTagName("Age").item(0).getTextConcent()); 



      } 

     } 
    } 
} 

Die XML-Datei:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Developer Id="1"> 
    <Name>Sahil</Name> 
    <Surname>Huseynzade</Surname> 
    <Age>21</Age> 
</Developer> 
+0

Sahil Huseynzade Kober

+0

' .getTextConcent() 'sollte' .getTextContent() sein ' – Jason

Antwort

1

Wenn Sie die folgenden Importe verwenden, funktioniert es:

import java.io.File; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

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

, auch .getTextConcent() mit .getTextContent() ersetzen.

Plus, wenn das ID-Attribut Id geschrieben wird, dann müssen Sie es als solches anfordern - nicht ID. Es ist Groß- und Kleinschreibung.

Edit: wenn Sie eine Reihe von Entwickler von XML lesen möchten:

Angenommen, Sie haben die folgende Datei haben:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Developers> 
    <Developer Id="1"> 
     <Name>Sahil</Name> 
     <Surname>Huseynzade</Surname> 
     <Age>21</Age> 
    </Developer> 
    <Developer Id="2"> 
     <Name>Bob</Name> 
     <Surname>Nobody</Surname> 
     <Age>20</Age> 
    </Developer> 
    <Developer Id="3"> 
     <Name>Joe</Name> 
     <Surname>Bloggs</Surname> 
     <Age>19</Age> 
    </Developer> 
</Developers> 

Hier ist der Entwickler Klasse:

public class Developer { 

    private String id; 
    private String name; 
    private String surname; 
    private int age; 

    public Developer(String id, String name, String surname, int age) { 
     this.id = id; 
     this.name = name; 
     this.surname = surname; 
     this.age = age; 
    } 

    public String getId() { 
     return id; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getSurname() { 
     return surname; 
    } 

    public int getAge() { 
     return age; 
    } 
} 

Hier ist die Methode, um es zu lesen:

public static void main(String[] args) throws Exception { 

    File xmlFile = new File("data.xml"); 

    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
    org.w3c.dom.Document document = documentBuilder.parse(xmlFile); 

    NodeList list = document.getElementsByTagName("Developer"); 

    List<Developer> developers = new ArrayList<>(); 

    for (int i = 0; i < list.getLength(); i++) { 

     Node node = list.item(i); 

     if (node.getNodeType() == Node.ELEMENT_NODE) { 

      Element element = (Element) node; 

      Developer developer = new Developer(
       element.getAttribute("Id"), 
       element.getElementsByTagName("Name").item(0).getTextContent(), 
       element.getElementsByTagName("Surname").item(0).getTextContent(), 
       Integer.parseInt(element.getElementsByTagName("Age").item(0).getTextContent()) 
      ); 
      developers.add(developer); 
     } 
    } 

    // at this point we have a list of developers 

    // print out all the developers 
    for (Developer developer : developers) { 
     System.out.println("ID: " + developer.getId()); 
     System.out.println("Name: " + developer.getName()); 
     System.out.println("Surname: " + developer.getSurname()); 
     System.out.println("Age: " + developer.getAge()); 
    } 
} 
+0

Getestet in IntelliJ mit Java8. – Jason

+0

Danke. Es klappt. Ich möchte das zu einer Array-Liste bringen. Wie kann ich das machen? – Kober

+0

Ihr Code sollte bereits alle 'Developer'-Knoten aus dem XML-Code lesen können. Alles, was Sie tun müssen, ist ein Objekt zu instanziieren, um die Entwicklerattribute zu speichern und es zu einer 'Arraylist' hinzuzufügen. – Jason