如何在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并不是一个坏主意。

