如何在Java中读取XML文件 - DOM解析器

x33g5p2x  于2022-10-06 转载在 Java  
字(4.2k)|赞(0)|评价(0)|浏览(476)

在这篇文章中,我们将学习如何在Java中读取XML文件。我们还将学习如何使用DOM XML解析器将XML文件解析为Java对象。DOM XML解析器解析整个XML文档,并将其加载到内存中;然后将其建模为一个 "TREE "结构,以便轻松进行遍历或操作。

简而言之,它把一个XML文件变成了DOM或树状结构,我们必须逐个节点进行遍历才能得到你想要的东西。警告: DOM解析器很慢,当它加载一个包含大量数据的XML文档时,会消耗大量的内存。请考虑用SAX解析器来解决这个问题,SAX比DOM更快,消耗的内存也更少。

开发过程步骤

  1. 输入users.xml文件(我们将读取的XML文件)
  2. 创建用户类(将XML数据填充到用户对象中)
  3. 使用Java DOM解析器在Java中读取XML文件的程序

1. 输入 users.xml文件(我们将读取的XML文件)

下面是这个程序中要读取的XML文件。

<?xmlversion="1.0"encoding="UTF-8"?>
<Users>
    <User>
        <id>1</id>
        <firstName>Ramesh</firstName>
        <lastName>Fadatare</lastName>
        <age>28</age>
        <gender>Male</gender>
    </User>
    <User>
        <id>2</id>
        <firstName>John</firstName>
        <lastName>Cena</lastName>
        <age>45</age>
        <gender>Male</gender>
    </User>
    <User>
        <id>3</id>
        <firstName>Tom</firstName>
        <lastName>Cruise</lastName>
        <age>40</age>
        <gender>Male</gender>
     </User>
</Users>

2. 创建用户类(将XML数据填充到用户对象中)

所以这个XML是用户的列表,为了读取这个XML文件,我们将创建一个bean对象User,然后我们将解析XML以得到用户的列表。

这里是User bean对象。

package net.javaguides.javaxmlparser.dom;

public class User {
    private int id;
    private String firstName;
    private String lastName;
    private int age;
    private String gender;

    public int getId() {
        return id;
    }

    public void setId(int i) {
        this.id = i;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", age=" + age + ", gender=" +
            gender + "]";
    }
}

3. 使用Java DOM解析器在Java中读取XML文件的程序

这是一个使用DOM解析器来读取和解析XML文件以获得用户对象列表的java程序。

package net.javaguides.javaxmlparser.dom;

import java.io.File;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
* Java DOM Parser to Read XML File in Java 
* @author Ramesh Fadatare
*
*/

public class ReadXMLFileInJava {
    public static void main(String[] args) {
        String filePath = "users.xml";
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();
            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
            NodeList nodeList = doc.getElementsByTagName("User");
            // now XML is loaded as Document in memory, lets convert it to Object List
            List < User > userList = new ArrayList < User > ();

            for (int i = 0; i < nodeList.getLength(); i++) {
                userList.add(getUser(nodeList.item(i)));
            }
            // lets print User list information
            for (User emp: userList) {
                System.out.println(emp.toString());
            }
        } catch (SAXException | ParserConfigurationException | IOException e1) {
            e1.printStackTrace();
        }

    }

    private static User getUser(Node node) {
        // XMLReaderDOM domReader = new XMLReaderDOM();
        User user = new User();
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            Element element = (Element) node;
            user.setId(Integer.parseInt(getTagValue("id", element)));
            user.setFirstName(getTagValue("firstName", element));
            user.setLastName(getTagValue("lastName", element));
            user.setGender(getTagValue("gender", element));
            user.setAge(Integer.parseInt(getTagValue("age", element)));
        }
        return user;
    }

    private static String getTagValue(String tag, Element element) {
        NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
        Node node = (Node) nodeList.item(0);
        return node.getNodeValue();
    }

}

上述程序的输出:

Root element :Users
User [id=1, firstName=Ramesh, lastName=Fadatare, age=28, gender=Male]
User [id=2, firstName=John, lastName=Cena, age=45, gender=Male]
User [id=3, firstName=Tom, lastName=Cruise, age=40, gender=Male]

以上就是关于如何在java中读取XML文件或解析XML文件的全部内容。

相关文章