DOM解析XML步骤
使用SAXReader需要导入dom4j.jar包
dom4j:是一个java的XML API,类似JDOM,用来读和写XML文件的,
他是一个非常优秀的JAVA XML API,具有性能优异,功能强大和易用
的特点,他也是一个开放源代码的软件。
使用步骤:
1.导入dom4j.jar开发包
2.创建SAXReader类的对象来实现读取XML文档
SAXReader reader = new SAXReader();
3.使用SAXReader类的read方法获取Document对象,Document对象是
一颗文档树的根,可以为我们提供对文档数据的最初(或最顶层的访问入口)
Document doc = reader.read("XML文件路径,通常用类加载器获取");
4.使用Document对象的getRootElement方法获取要解析的XML文件的根元素,
该方法返回值类型为Element,Element对象表示XML文档中的元素。元素可包含
属性,其他元素或文本,若元素包含文本,则在文本节点中表示该文本
Element root = doc.getRootElement();
5.接下来可以使用Element对象提供的方法继续解析XML文档,例如:elements方法
用于获取当前元素下的所有子元素
List<Element> elements = root.elements();
<?xmlversion="1.0"encoding="UTF-8"?>
<list>
<empid="1">
<name>tom</name>
<age>34</age>
<gender>F</gender>
<salary>30000</salary>
</emp>
<empid="2">
<name>jerry</name>
<age>24</age>
<gender>M</gender>
<salary>60000</salary>
</emp>
</list>
下面是个封装xml文档的这些数据的一个实体类package day01;
/**
* 对应XML文档的实体类
* @author chen
*
*/
public class Emp {
privateintid;
private Stringname;
privateintage;
private Stringgender;
privatedoublesalary;
public Emp(intid,Stringname,intage,Stringgender,doublesalary) {
super();
this.id =id;
this.name =name;
this.age =age;
this.gender =gender;
this.salary =salary;
}
public Emp() {
super();
}
public int getId() {
returnid;
}
public void setId(int id) {
this.id =id;
}
public String getName() {
returnname;
}
public void setName(String name) {
this.name =name;
}
public int getAge() {
returnage;
}
public void setAge(int age) {
this.age =age;
}
public String getGender() {
returngender;
}
public void setGender(String gender) {
this.gender =gender;
}
public double getSalary() {
returnsalary;
}
public void setSalary(double salary) {
this.salary =salary;
}
@Override
public String toString() {
return"Emp [id=" +id +",name=" +name +",age=" +age
+ ",gender=" +gender +",salary=" +salary +"]";
}
}
package day01;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
* DOM解析XML文档
*/
public class TestDOMRes {
@Test
public void testReadXML() {
try {
//0.导入dom4j.jar开发包
//1.创建SAXReader对象
SAXReader reader =new SAXReader();
//2.利用SAXReader的read方法读取指定XML文档
/*
* DOM耗时的地方就在这里,这一步就会将给定的文档内容
* 全部解析完毕,并保存到一个Document对象中,由于都
* 存入内存了,所以若XML文档内容比较多,内存就会有压力
*/
InputStream path = TestDOMRes.class.getClassLoader().
getResourceAsStream("EmpList.xml");
Document doc =reader.read(path);
//3.使用Document对象的getRootElement方法获取XML文档根元素
Element ele =doc.getRootElement();
//4.使用Element的elements方法获取<list>节点下的所有元素
List<Element> elements =ele.elements();
//5.创建保存所有员工对象的集合
List<Emp> emps =new ArrayList<Emp>();
//5.1 遍历上一步的elements集合,每循环一次获取一个emp元素
for(Elementelement :elements) {
//5.2 使用Element对象的attribute方法获取id对应的Attribute对象
//然后在使用Attribute对象的getValue方法可以获取到属性id对应的文本信息
int id = Integer.parseInt(element.attribute("id").getValue());
//5.3 使用Element对象的elementText方法获取节点对应的文本信息
String name =element.elementText("name");
int age = Integer.parseInt(element.elementText("age"));
String gender =element.elementText("gender");
double salary = Double.parseDouble(element.elementText("salary"));
//5.4 将上述信息存储到emp对象。并将对象放入list集合
Emp emp =new Emp(id,name,age,gender,salary);
emps.add(emp);
}
//6.将emps集合的信息输出到控制台
System.out.println("解析完毕");
System.out.println(emps);
} catch(Exceptione) {
e.printStackTrace();
}
}
}
希望大家多多支持!