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

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

在这篇文章中,我们将学习如何在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文件。

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

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

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

这里是User bean对象。

  1. package net.javaguides.javaxmlparser.dom;
  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 DOM解析器在Java中读取XML文件的程序

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

  1. package net.javaguides.javaxmlparser.dom;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import javax.xml.parsers.DocumentBuilder;
  7. import javax.xml.parsers.DocumentBuilderFactory;
  8. import javax.xml.parsers.ParserConfigurationException;
  9. import org.w3c.dom.Document;
  10. import org.w3c.dom.Element;
  11. import org.w3c.dom.Node;
  12. import org.w3c.dom.NodeList;
  13. import org.xml.sax.SAXException;
  14. /**
  15. * Java DOM Parser to Read XML File in Java
  16. * @author Ramesh Fadatare
  17. *
  18. */
  19. public class ReadXMLFileInJava {
  20. public static void main(String[] args) {
  21. String filePath = "users.xml";
  22. File xmlFile = new File(filePath);
  23. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  24. DocumentBuilder dBuilder;
  25. try {
  26. dBuilder = dbFactory.newDocumentBuilder();
  27. Document doc = dBuilder.parse(xmlFile);
  28. doc.getDocumentElement().normalize();
  29. System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
  30. NodeList nodeList = doc.getElementsByTagName("User");
  31. // now XML is loaded as Document in memory, lets convert it to Object List
  32. List < User > userList = new ArrayList < User > ();
  33. for (int i = 0; i < nodeList.getLength(); i++) {
  34. userList.add(getUser(nodeList.item(i)));
  35. }
  36. // lets print User list information
  37. for (User emp: userList) {
  38. System.out.println(emp.toString());
  39. }
  40. } catch (SAXException | ParserConfigurationException | IOException e1) {
  41. e1.printStackTrace();
  42. }
  43. }
  44. private static User getUser(Node node) {
  45. // XMLReaderDOM domReader = new XMLReaderDOM();
  46. User user = new User();
  47. if (node.getNodeType() == Node.ELEMENT_NODE) {
  48. Element element = (Element) node;
  49. user.setId(Integer.parseInt(getTagValue("id", element)));
  50. user.setFirstName(getTagValue("firstName", element));
  51. user.setLastName(getTagValue("lastName", element));
  52. user.setGender(getTagValue("gender", element));
  53. user.setAge(Integer.parseInt(getTagValue("age", element)));
  54. }
  55. return user;
  56. }
  57. private static String getTagValue(String tag, Element element) {
  58. NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
  59. Node node = (Node) nodeList.item(0);
  60. return node.getNodeValue();
  61. }
  62. }

上述程序的输出:

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

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

相关文章

最新文章

更多