用dom4j解析html,dom4j解析xml案例(dom4j-1.6.1.jar)_对xml增删改查

本文详细介绍了如何使用dom4j-1.6.1.jar库对XML文件进行增删改查操作。首先在项目中引入dom4j库,创建XML文件并定义Student实体类。接着,定义IStudentDao接口及其实现类,包含保存、删除、更新和查询方法。最后通过测试类验证dom4j操作XML的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值