如何在Java中读取XML文件(DOM分析器)
时间:2020-02-23 14:34:37 来源:igfitidea点击:
今天,我们将学习如何用Java读取XML文件。
我们还将学习如何使用DOM解析器将Java中的XML文件解析为对象。
DOM XML分析器最容易理解。
它将XML对象作为Document加载到内存中,然后您可以轻松地遍历对象中的不同元素和节点。
元素和节点的遍历不需要按顺序进行。
如何用Java读取XML文件
DOM Parser适用于小型XML文档,但由于它将完整的XML文件加载到内存中,因此不适用于大型XML文件。
对于大型XML文件,应使用SAX Parser。
在本教程中,我们将读取XML文件并进行解析以从中创建对象。
这是将在此程序中读取的XML文件。
employee.xml
<?xml version="1.0"?> <Employees> <Employee> <name>hyman</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender> </Employee> <Employee> <name>Lisa</name> <age>35</age> <role>CSS Developer</role> <gender>Female</gender> </Employee> </Employees>
因此,此XML是雇员列表,要读取此XML文件,我将创建一个bean对象Employee,然后我们将解析XML以获取雇员列表。
这是Employee bean对象。
package com.theitroad.xml; public class Employee { private String name; private String gender; private int age; private String role; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; } }
注意,我已经重写了toString()方法以打印有关员工的有用信息。
阅读这篇文章,以了解您应该始终使用@Override注解覆盖方法。
如果您不熟悉注释,请阅读Java注释教程。
Java DOM解析器
这是使用DOM解析器读取和解析XML文件以获得Employee对象列表的Java程序。
package com.theitroad.xml; 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; public class XMLReaderDOM { public static void main(String[] args) { String filePath = "employee.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("Employee"); //now XML is loaded as Document in memory, lets convert it to Object List List<Employee> empList = new ArrayList<Employee>(); for (int i = 0; i < nodeList.getLength(); i++) { empList.add(getEmployee(nodeList.item(i))); } //lets print Employee list information for (Employee emp : empList) { System.out.println(emp.toString()); } } catch (SAXException | ParserConfigurationException | IOException e1) { e1.printStackTrace(); } } private static Employee getEmployee(Node node) { //XMLReaderDOM domReader = new XMLReaderDOM(); Employee emp = new Employee(); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; emp.setName(getTagValue("name", element)); emp.setAge(Integer.parseInt(getTagValue("age", element))); emp.setGender(getTagValue("gender", element)); emp.setRole(getTagValue("role", element)); } return emp; } 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 :Employees Employee:: Name=hyman Age=29 Gender=Male Role=Java Developer Employee:: Name=Lisa Age=35 Gender=Female Role=CSS Developer
在现实生活中,在将XML文件解析为对象之前验证XML文件,学习如何在Java中针对XSD验证XML并不是一个坏主意。