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

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

在这篇文章中,我们将讨论如何使用JDOM parser在Java中读取XML文件。
JDOM是一个开源的、基于Java的库,用于解析XML文档。它是典型的Java开发者友好型API。它是Java优化的,它使用Java集合如ListArrays

JDOM与DOM和SAX API一起工作,结合了两者的优点。它的内存占用率很低,而且几乎和SAX一样快。

JDOM的依赖

JDOM不是标准JDK的一部分,所以要使用JDOM,你需要从JDOM Official Website下载其二进制文件。一旦二进制文件被下载,在你的项目classpath中包含JDOM jar,你就可以开始使用它了。本例中,我们将使用当前的JDOM 2.0.6版本(jdom-2.0.6.jar)。如果你使用的是基于maven的项目,那么请在你的pom.xml中添加以下maven依赖项。

<!-- https://mvnrepository.com/artifact/org.jdom/jdom2 -->
<dependency>
 <groupId>org.jdom</groupId>
 <artifactId>jdom2</artifactId>
 <version>2.0.6</version>
</dependency>

JDOM解析器的重要类

  1. org.jdom2.input.DOMBuilder: 使用DOM解析器来解析XML,并将其转换为JDOM文档。
  2. org.jdom2.input.SAXBuilder: 使用SAX解析器来解析XML并将其转化为JDOM文档。
    1.org.jdom2.input.StAXEventBuilder: 使用STAX事件解析器来解析XML并将其转换为JDOM文档。
    1.org.jdom2.input.StAXStreamBuilder。使用STAX Stream Parser来解析XML并将其转换为JDOM Document。
    1.org.jdom2.Document。JDOM Document提供了有用的方法来获取根元素,读取、编辑和写入元素的内容。在这里,我们将使用它来从XML中获取根元素。
    1.org.jdom2.Element: 提供了有用的方法来获取子元素的列表,获取子元素的值,获取属性值。
    JDOM Tutorial上阅读更多关于JDOM的信息

程序开发步骤

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

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

确保你在文件系统中有一个jdom_users.xml文件,并在该文件中添加以下内容。

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

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

User对象来代表XML中的User元素。

package net.javaguides.javaxmlparser.jdom;

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 JDOM解析器在Java中读取XML文件的程序

下面是使用DOMBuilder读取XML文件到User对象列表的测试程序。

package net.javaguides.javaxmlparser.jdom;

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

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

public class ReadXMLFile {
    public static void main(String[] args) {
        final String fileName = "jdom_users.xml";
        try {
            // we can create JDOM Document from DOM, SAX and STAX Parser Builder classes
            SAXBuilder builder = new SAXBuilder();
            File xmlFile = new File(fileName);
            Document jdomDoc = (Document) builder.build(xmlFile);
            Element root = jdomDoc.getRootElement();
            List < Element > listOfUsers = root.getChildren("User");
            List < User > userList = new ArrayList < > ();

            for (Element userElement: listOfUsers) {
                User user = new User();
                user.setId(Integer.parseInt(userElement.getAttributeValue("id")));
                user.setAge(Integer.parseInt(userElement.getChildText("age")));
                user.setFirstName(userElement.getChildText("firstName"));
                user.setLastName(userElement.getChildText("lastName"));
                user.setGender(userElement.getChildText("gender"));
                userList.add(user);
            }
            // lets print Users list information
            userList.forEach(user - > {
                System.out.println(user.toString());
            });

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

上述程序的输出结果是:

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]

相关文章