2016-12-12 145 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