2016-12-12 141 views
0

我想讀取XML數據,但我得到了一個錯誤:讀取XML文件在Java

node cannot be converted to element

問題是什麼? 這裏是整個代碼:

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()); 



      } 

     } 
    } 
} 

的xml文件:

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

<?XML版本= 「1.0」 編碼= 「UTF-8」 獨立= 「否」?> <開發者ID = 「1」> 薩赫勒 Huseynzade Kober

+0

' .getTextConcent()'應該是'.getTextContent()' – Jason

回答

1

如果您使用以下的進口,它的工作原理:

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; 

而且,與.getTextContent()更換.getTextConcent()

另外,如果id屬性拼寫爲Id那麼您需要請求它 - 而不是ID。它是區分大小寫的。

編輯:如果你想從XML讀取一組開發人員:

比方說,你有以下數據文件:

<?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> 

這裏的開發類:

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; 
    } 
} 

以下是讀取它的方法:

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

使用Java8在IntelliJ中測試。 – Jason

+0

謝謝。有用。我想把它帶到一個數組列表。我怎樣才能做到這一點? – Kober

+0

你的代碼應該已經能夠讀取xml中的所有'Developer'節點。您只需實例化某種對象來存儲開發人員屬性並將其添加到'arraylist'。 – Jason