依赖jar包
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
使用DOM4J写入XML的大致步骤:
1:创建一个Document对象表示一个空白文档
Document doc = DocumentHelper.createDocument();
2:向Document中添加根元素
Element root = doc.addElement("list");
Document提供了添加根元素的方法:
Element addElement(String name)
向当前文档中添加给定名字的根元素,并以Element实例的形式返回,以便于继续向根元素追加信息.该方法只能调用一次,因为一个文档只能有一个根元素.
3:从根元素开始按照要生成的文档结构逐级添加子元素及信息
for(Emp e : list){
//向根元素中追加子元素<emp>
Element empEle = root.addElement("emp");
//向<emp>中追加子元素<name>
Element nameEle = empEle.addElement("name");
//向<name>标签中间添加文本
nameEle.addText(e.getName());
Element ageEle = empEle.addElement("age");
ageEle.addText(String.valueOf(e.getAge()));
Element genderEle = empEle.addElement("gender");
genderEle.addText(e.getGender());
Element salaryEle = empEle.addElement("salary");
salaryEle.addText(String.valueOf(e.getSalary()));
//向<emp>中追加id属性
empEle.addAttribute("id", String.valueOf(e.getId()));
}
Element提供了追加相关信息的方法:
Element addElement(String name)
向当前元素中追加子元素并将其返回,以便继续对其追加
Element addText(String text)
向当前元素的开始与结束标签之间添加文本,返回的仍然是当前元素,以便对当前元素继续做其他追加操作.
Element addAttribute(String name,String value)
向当前元素中追加指定名字与对应值的属性,返回值仍然是当前元素.
4:创建XmlWriter
//org.dom4j.io.XMLWriter
XMLWriter writer = new XMLWriter(new FileOutputStream("emplist.xml"),OutputFormat.createPrettyPrint() );
5:将Document通过XmlWriter写出以生成XML文档
writer.write(doc);
writer.close();
使用DOM4J解析XML的大致步骤:
1. 创建SAXReader
SAXReader reader = new SAXReader();
2.使用SAXReader读取xml文档并得到对应的Document对象
Document doc = reader.read(new File("emplist.xml"));
3.通过Document获取根元素
Element root = doc.getRootElement();
Element的每一个实例用于表示xml文档中的一个元素(一对标签)。其提供了很多获取其表示的元素相关信息的方法:
String getName() 获取当前元素的名字(标签的名字)
String getText() 获取当前元素中间的文本(开始和结束标签中间的文本信息)
String elementText(String name) 获取当前元素中指定名字的子元素中间的文本
例如:
String str = e.elementText("name"); 等同于 String str = e.element("name").getText();
Element element(String name) 获取当前元素中指定名字的子元素
List elements() 获取当前元素中所有子元素
List elements(String name) 获取当前元素中所有的指定名字的同名子元素
Attribute attribute(String name) 获取当前元素中指定名字的属性
4.从根元素中按照文档结构逐级获取子元素,已达到遍历XML文档数据的目的
例
将emplist.xml文件中保存的员工信息解析出来,以若干Emp实例形式存入List集合.
*程序中的数据不应在程序中写死,否则一旦数据有修改,就要修改源程序.
Emp.java:
package xml;
/**
* Emp的每个实例用于表示一个员工信息
* @author adminitartor
*
*/
public class Emp {
private int id;
private String name;
private int age;
private String gender;
private int salary;
public Emp(int id, String name, int age, String gender, int salary) {
super();
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String toString(){
return id+","+name+","+age+","+gender+","+salary;
}
}
emplist.xml:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<emp id="1">
<name>张三</name>
<age>44</age>
<gender>男</gender>
<salary>5000</salary>
</emp>
<emp id="2">
<name>李四</name>
<age>23</age>
<gender>女</gender>
<salary>6000</salary>
</emp>
<emp id="3">
<name>王五</name>
<age>24</age>
<gender>男</gender>
<salary>8000</salary>
</emp>
<emp id="4">
<name>赵六</name>
<age>28</age>
<gender>男</gender>
<salary>15000</salary>
</emp>
<emp id="5">
<name>钱七</name>
<age>27</age>
<gender>女</gender>
<salary>20000</salary>
</emp>
<emp id="6">
<name>孙八</name>
<age>43</age>
<gender>男</gender>
<salary>30000</salary>
</emp>
</list>
ParseXmlDemo:
package xml;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* 解析XML
* @author adminitartor
*
*/
public class ParseXmlDemo {
public static void main(String[] args) {
List<Emp> list = new ArrayList<Emp>();
try {
//1
SAXReader reader = new SAXReader();
//2
Document doc = reader.read(new File("emplist.xml"));
// reader.read(new FileInputStream("emplist.xml"));
//3
Element root = doc.getRootElement();
// System.out.println(root.getName());
/*
* 获取根标签下所有<emp>标签
*/
List<Element> empList = root.elements("emp");
/*
* 将每个<emp>标签表示的员工信息解析
* 出来以Emp实例形式存入list集合
*/
for(Element empEle : empList){
//获取员工名字
//1获取<name>标签
Element nameEle = empEle.element("name");
//2获取中间的文本数据
String name = nameEle.getText();
int age = Integer.parseInt(
empEle.element("age").getText()
);
String gender = empEle.elementText("gender");
int salary = Integer.parseInt(
empEle.elementText("salary")
);
//获取id
// Attribute att = empEle.attribute("id");
// int id = Integer.parseInt(
// att.getValue()
// );
int id = Integer.parseInt(
empEle.attributeValue("id")
);
Emp emp = new Emp(id,name,age,gender,salary);
list.add(emp);
}
System.out.println("解析完毕!");
for(Emp e : list){
System.out.println(e);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}