簡體   English   中英

在Java中讀取xml文件

[英]read xml file in the java

我想從xml讀取數據,但出現錯誤:

節點無法轉換為元素

問題是什么? 這是完整的代碼:

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>

如果使用以下導入,則可以使用:

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;

同樣,將.getTextConcent()替換為.getTextContent()

另外,如果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>

這是Developer類:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM