在这篇文章中,我们将学习如何在Java中读取XML文件。我们还将学习如何使用DOM XML解析器将XML文件解析为Java对象。DOM XML解析器解析整个XML文档,并将其加载到内存中;然后将其建模为一个 "TREE "结构,以便轻松进行遍历或操作。
简而言之,它把一个XML文件变成了DOM或树状结构,我们必须逐个节点进行遍历才能得到你想要的东西。警告: DOM解析器很慢,当它加载一个包含大量数据的XML文档时,会消耗大量的内存。请考虑用SAX解析器来解决这个问题,SAX比DOM更快,消耗的内存也更少。
下面是这个程序中要读取的XML文件。
<?xmlversion="1.0"encoding="UTF-8"?>
<Users>
<User>
<id>1</id>
<firstName>Ramesh</firstName>
<lastName>Fadatare</lastName>
<age>28</age>
<gender>Male</gender>
</User>
<User>
<id>2</id>
<firstName>John</firstName>
<lastName>Cena</lastName>
<age>45</age>
<gender>Male</gender>
</User>
<User>
<id>3</id>
<firstName>Tom</firstName>
<lastName>Cruise</lastName>
<age>40</age>
<gender>Male</gender>
</User>
</Users>
所以这个XML是用户的列表,为了读取这个XML文件,我们将创建一个bean对象User
,然后我们将解析XML以得到用户的列表。
这里是User bean对象。
package net.javaguides.javaxmlparser.dom;
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 + "]";
}
}
这是一个使用DOM解析器来读取和解析XML文件以获得用户对象列表的java程序。
package net.javaguides.javaxmlparser.dom;
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;
/**
* Java DOM Parser to Read XML File in Java
* @author Ramesh Fadatare
*
*/
public class ReadXMLFileInJava {
public static void main(String[] args) {
String filePath = "users.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("User");
// now XML is loaded as Document in memory, lets convert it to Object List
List < User > userList = new ArrayList < User > ();
for (int i = 0; i < nodeList.getLength(); i++) {
userList.add(getUser(nodeList.item(i)));
}
// lets print User list information
for (User emp: userList) {
System.out.println(emp.toString());
}
} catch (SAXException | ParserConfigurationException | IOException e1) {
e1.printStackTrace();
}
}
private static User getUser(Node node) {
// XMLReaderDOM domReader = new XMLReaderDOM();
User user = new User();
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
user.setId(Integer.parseInt(getTagValue("id", element)));
user.setFirstName(getTagValue("firstName", element));
user.setLastName(getTagValue("lastName", element));
user.setGender(getTagValue("gender", element));
user.setAge(Integer.parseInt(getTagValue("age", element)));
}
return user;
}
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 :Users
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]
以上就是关于如何在java中读取XML文件或解析XML文件的全部内容。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2018/10/how-to-read-xml-file-in-java-dom-parser.html
内容来源于网络,如有侵权,请联系作者删除!