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

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

在这篇文章中,我们将讨论如何使用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依赖项。

  1. <!-- https://mvnrepository.com/artifact/org.jdom/jdom2 -->
  2. <dependency>
  3. <groupId>org.jdom</groupId>
  4. <artifactId>jdom2</artifactId>
  5. <version>2.0.6</version>
  6. </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文件,并在该文件中添加以下内容。

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <Users>
  3. <User id= "1">
  4. <firstName>Ramesh</firstName>
  5. <lastName>Fadatare</lastName>
  6. <age>28</age>
  7. <gender>Male</gender>
  8. </User>
  9. <User id= "2">
  10. <firstName>John</firstName>
  11. <lastName>Cena</lastName>
  12. <age>45</age>
  13. <gender>Male</gender>
  14. </User>
  15. <User id= "3">
  16. <firstName>Tom</firstName>
  17. <lastName>Cruise</lastName>
  18. <age>40</age>
  19. <gender>Male</gender>
  20. </User>
  21. </Users>

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

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

  1. package net.javaguides.javaxmlparser.jdom;
  2. public class User {
  3. private int id;
  4. private String firstName;
  5. private String lastName;
  6. private int age;
  7. private String gender;
  8. public int getId() {
  9. return id;
  10. }
  11. public void setId(int i) {
  12. this.id = i;
  13. }
  14. public String getFirstName() {
  15. return firstName;
  16. }
  17. public void setFirstName(String firstName) {
  18. this.firstName = firstName;
  19. }
  20. public String getLastName() {
  21. return lastName;
  22. }
  23. public void setLastName(String lastName) {
  24. this.lastName = lastName;
  25. }
  26. public int getAge() {
  27. return age;
  28. }
  29. public void setAge(int age) {
  30. this.age = age;
  31. }
  32. public String getGender() {
  33. return gender;
  34. }
  35. public void setGender(String gender) {
  36. this.gender = gender;
  37. }
  38. @Override
  39. public String toString() {
  40. return "User [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", age=" + age + ", gender=" +
  41. gender + "]";
  42. }
  43. }

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

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

  1. package net.javaguides.javaxmlparser.jdom;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import org.jdom2.Document;
  6. import org.jdom2.Element;
  7. import org.jdom2.input.SAXBuilder;
  8. public class ReadXMLFile {
  9. public static void main(String[] args) {
  10. final String fileName = "jdom_users.xml";
  11. try {
  12. // we can create JDOM Document from DOM, SAX and STAX Parser Builder classes
  13. SAXBuilder builder = new SAXBuilder();
  14. File xmlFile = new File(fileName);
  15. Document jdomDoc = (Document) builder.build(xmlFile);
  16. Element root = jdomDoc.getRootElement();
  17. List < Element > listOfUsers = root.getChildren("User");
  18. List < User > userList = new ArrayList < > ();
  19. for (Element userElement: listOfUsers) {
  20. User user = new User();
  21. user.setId(Integer.parseInt(userElement.getAttributeValue("id")));
  22. user.setAge(Integer.parseInt(userElement.getChildText("age")));
  23. user.setFirstName(userElement.getChildText("firstName"));
  24. user.setLastName(userElement.getChildText("lastName"));
  25. user.setGender(userElement.getChildText("gender"));
  26. userList.add(user);
  27. }
  28. // lets print Users list information
  29. userList.forEach(user - > {
  30. System.out.println(user.toString());
  31. });
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. }

上述程序的输出结果是:

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

相关文章

最新文章

更多