dom4j解析xml文件非常方便,本案例使用dom4j对xml进行增删改查操作,请认真看教程,首先引入dom4j-1.6.1.jar包,jar包下载地址:https://dom4j.github.io
一:首先在lib中引入dom4j-1.6.1.jar包,在src目录下创建student.xml文件,直接复制即可用,代码如下。<?xml version="1.0" encoding="UTF-8"?>
小红
18
女
广州天河骏景花园小明
17
男
广州天河华景新城二:创建Student实体类,用于封装student.xml内容,实体类如下。// 实体类,封装数据
public class Student {
private String id;
private String name;
private char gender;
private String age;
private String address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age= age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Student [address=" + address + ", gender=" + gender + ", id="
+ id + ", name=" + name + "]";
}
}
三:在IStudentDao.java内定义增删改查的接口。import java.util.List;
// 接口, 定义规范
public interface IStudentDao {
/**
* 保存一个student
* @param student 传入封装的student对象
*/
void save(Student student);
/**
* 根据编号删除
* @param id
*/
void delete(String id);
/**
* 修改(根据id修改)
* @param student
*/
void update(Student student);
/**
* 根据编号查询
* @param id
* @return
*/
Student findById(String id);
/**
* 查询全部学员
* @return
*/
List findAll();
}
四:创建StudentDaoImpl接口实现类,实现IStudentDao中定义的增删改查接口方法。import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
// 实现
public class StudentDaoImpl implements IStudentDao {
// jdk1.5 只支持对类方法的Override,不支持接口!
// jdk1.6以及以后的版本都支持对接口的Override
// 如果@Override报错, 选中项目,右键,属性,找到java compiler 修改编译环境
@Override
public Student findById(String id) {
// 创建一个Dom4J解析器,加载xml,获取文档对象
Document doc = XmlUtils.getDocument();
// 获取根节点
Element root = doc.getRootElement();
try {
// 获取根节点下,所有子节点
List list = root.elements();
for (Element e : list) {
// e 表示每一个student,
// 获取student的id属性
String idValue = e.attributeValue("id");
// 判断
if (id.equals(idValue)) {
// 找到指定id的student
Student student = new Student();
student.setId(id);
student.setName(e.element("name").getTextTrim());
student.setGender(e.elementText("gender").charAt(0));
student.setAddress(e.elementText("address"));
return student;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
return null;
}
@Override
public void delete(String id) {
try {
Document doc = XmlUtils.getDocument();
Element root = doc.getRootElement();
List list = root.elements();
for (Element e : list) {
if (id.equals(e.attributeValue("id"))) {
// 找到了要删除的元素
// 通过父亲删除
// e.getParent().remove(e);
// 自己删除自己
e.detach();
break;
}
}
// 更新
XmlUtils.write2XML(doc);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public List findAll() {
try {
Document doc = XmlUtils.getDocument();
// 获取根节点
Element root = doc.getRootElement();
// list集合
List listStudent = new ArrayList();
List list = root.elements();
for (Element e : list) {
// 获取每一个student节点, 再取其中数据
Student student = new Student();
student.setId(e.attributeValue("id"));
student.setName(e.element("name").getTextTrim());
student.setGender(e.elementText("gender").charAt(0));
student.setAddress(e.elementText("address"));
// 封装好的对象,添加到listStudent
listStudent.add(student);
}
return listStudent;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void save(Student student) {
try {
Document doc = XmlUtils.getDocument();
// 1. 获取跟节点
Element root = doc.getRootElement();
// 2. 给跟节点添加子节点-student
Element ele_student = root.addElement("student");
// 2. 给跟节点student 添加id属性
ele_student.addAttribute("id", student.getId());
// 3. student节点,添加name子节点
ele_student.addElement("name").setText(student.getName());
// 3. student节点,添加age子节点
ele_student.addElement("age").setText("20");
// 3. student节点,添加gender子节点
ele_student.addElement("gender").setText(student.getGender() + "");
// 3. student节点,添加address子节点
ele_student.addElement("address").setText(student.getAddress());
// 4. 更新
XmlUtils.write2XML(doc);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void update(Student student) {
// 先根据id找到更新的student标签,再更新值
try {
Document doc = XmlUtils.getDocument();
Element root = doc.getRootElement();
List list = root.elements();
for (Element e : list) {
if (student.getId().equals(e.attributeValue("id"))) {
// 找到更新的元素
// 获取更新的name标签,再设置值
e.element("name").setText(student.getName());
// 获取更新的age标签,再设置值
// e.element("age").setText("20");
// 获取更新的gender标签,再设置值
e.element("gender").setText(student.getGender() + "");
// 获取更新的address标签,再设置值
e.element("address").setText(student.getAddress());
break;
}
}
// 更新
XmlUtils.write2XML(doc);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
五:由于第四步中每个方法都使用到了Document对象和,所以我把公共的方法抽取到了XmlUtils里面,代码如下:public class XmlUtils {
private static String path = "src/student.xml";
/**
* 返回Document对象
*/
public static Document getDocument(){
try {
SAXReader reader = new SAXReader();
Document doc = reader.read(path);
return doc;
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}
/**
* 更新doc到默认的xml文件
* @param doc
*/
public static void write2XML(Document doc){
try {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileOutputStream(new File(path)), format);
writer.write(doc);
writer.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
六:测试dom4j方法,本人创建了App.java类,使用junit @Test方法来测试dom4j增删改查方法import org.dom4j.DocumentException;
import org.junit.Test;
// 测试类
public class App {
IStudentDao studentDao = new StudentDaoImpl();
// 测试 (用户,调用者 )
@Test
public void findById() {
try {
Student stu = studentDao.findById("A100");
System.out.println(stu);
} catch (Exception e) {
System.out.println("当前网络忙,请稍后再试!");
e.printStackTrace(); // 开发时候查看异常
}
}
@Test
public void delete() {
try {
studentDao.delete("A100");
} catch (Exception e) {
System.out.println("当前网络忙,请稍后再试!");
e.printStackTrace(); // 开发时候查看异常
}
}
@Test
public void save() {
try {
Student s = new Student();
s.setId("B10000");
s.setName("Test");
s.setGender('男');
s.setAddress("广州");
studentDao.save(s);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findAll() {
try {
System.out.println(studentDao.findAll());
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void update() {
try {
Student s = new Student();
s.setId("B10000");
s.setName("Rose");
s.setGender('女');
s.setAddress("广州天河");
studentDao.save(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/129.html