909422229__利用dom4j修改XML数据_进行增删改查【最新】

来源:互联网 发布:凸优化 中文版 pdf 编辑:程序博客网 时间:2024/06/06 03:17

下面只发studentDao与util的源码:

代码已经测试过了,没有问题,如果有需要的调整,会修改,如有错误请帮忙改正,下午整理了一下修改,其实跟查询差不多,只是设置一下元素体即可,代码已经更新,时间2016年9月10日14:22:07

StudentDao:

package com.text.dao;


import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.util.List;


import org.dom4j.Document;
import org.dom4j.Element;


import com.text.daomain.Student;
import com.text.util.XmlUtil;


/**
 * 第三步:对对象进行数据访问,数据访问,进行增删改查
 * 
 * @author 90942
 * 
 */
public class StudentDao {
/**
* 添加对象

* @param s
* @throws FileNotFoundException
* @throws UnsupportedEncodingException
*/
public void addStudent(Student s) throws Exception {
// 获取解析后的XML文件
Document doc = XmlUtil.XMLDocument();
// 获取元素的根节点
Element root = doc.getRootElement();
Element student = root.addElement("student");
// 创建属性,创建元素体,创建元素,返回的都是元素对象,直接在下面添加对象即可添加到XML中
student.addAttribute("id", s.getId());


student.addElement("name").setText(s.getName());
student.addElement("age").setText(s.getAge());
System.out.println("添加成功!");
// 顺序写入文档
XmlUtil.XMLPaiXu(doc);
}


/**
* 根据对象id删除对象

* @param name
*/
public void deletaStudent(String name) {


Document doc = XmlUtil.XMLDocument();


Element root = doc.getRootElement();
List<Element> lists = root.elements();
for (int i = 0; i < lists.size(); i++) {
Element ele = lists.get(i);
// 这里的ele是name的父亲也就是student
if (name.equals(ele.element("name").getText())) {
// 删除的是ele的父亲,无需再次获得父亲得元素
root.remove(ele);
System.out.println("删除成功!!");
} else {
System.out.println("学生不存在,删除失败");
}
}
XmlUtil.XMLPaiXu(doc);
}


/**
* 修改对象昂的年龄

* @param age
*/
public void updateStudent(String age, String name, String id) {
Student s = null;
Document doc = XmlUtil.XMLDocument();
Element root = doc.getRootElement();
List<Element> lists = root.elements();
for (int i = 0; i < lists.size(); i++) {
Element ele = lists.get(i);
System.out.println("这是在进行查找操作");
if (id.equals(ele.attributeValue("id"))) {
// 在nodeToBean中获取element的值设置到student中
s = XmlUtil.nodeToBean(ele, Student.class);
System.out.println("开始修改:");
ele.element("name").setText(name);
ele.element("age").setText(age);
}
}
System.out.println("修改成功!可以进行查询查看~!");
XmlUtil.XMLPaiXu(doc);


}


/**
* 根据对象id查询对象

* @param id
* @return
*/
public Student selectStudent(String id) {


Student s = null;
Document doc = XmlUtil.XMLDocument();
Element root = doc.getRootElement();
List<Element> lists = root.elements();
for (int i = 0; i < lists.size(); i++) {
Element ele = lists.get(i);
System.out.println("这是在进行查找操作");
if (id.equals(ele.attributeValue("id"))) {
// 在nodeToBean中获取element的值设置到student中
System.out.println("查询成功!");
s = XmlUtil.nodeToBean(ele, Student.class);
} else {
System.out.println("学生不存在,查询失败");
}
}


return s;
}


}

XMLUtil:

package com.text.util;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;


import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


import com.text.daomain.Student;


/**
 * 第二步:创建工具类,获取XML文件
 * 
 * @author 90942
 * 
 */
public class XmlUtil {
private static final String file = "src/NewFile.xml";


// 对XML进行dom4j的解析
public static Document XMLDocument() {


try {
// 读取磁盘文件的作用
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/NewFile.xml"));
return doc;
} catch (DocumentException e) {
System.out.println("获取XML文件失败!!");
// 处理异常,这样操作不会给上一层造成负担一旦没人处理就会抛给用户,这是绝对不允许的
throw new RuntimeException(e); // 转换成运行时异常
}


}


// 写入文档,并且对文档进行有序排列
public static void XMLPaiXu(Document doc) {


/**
* 写入之后使元素有秩序的排列 createPrettyPrint 良好的格式 OutputFormat 格式化的输出器
*/
OutputFormat format = OutputFormat.createPrettyPrint();
// 第一种将文档格式设置成需要的编码,设置的文档
format.setEncoding("UTF8");
// 将内存中的数据写入XML文档中
// FileWriter fileWroter = new FileWriter("src/users.xml");
// 防止乱码。指定编码类型
// 利用XMLWriter对象使文件成功写入XML文件,调用方法
// 参数:关联文件,写入的目标文件 第二个参数:指明输出格式
// 第二种将代码设置成需要的编码方式,设置自身。利用FileOutputStream指定了文档的编码类型
try {
XMLWriter writer = new XMLWriter(new OutputStreamWriter(
new FileOutputStream("src/NewFile.xml"), "UTF8"), format);
writer.write(doc);
writer.close();
} catch (Exception e) {
System.out.println("关闭刷新XML文件失败!!");
// 处理异常,这样操作不会给上一层造成负担一旦没人处理就会抛给用户,这是绝对不允许的
throw new RuntimeException(e); // 转换成运行时异常
}


}


// //创建对象
// public static Student ChuangStudent(Element e,Class<Student> student){
//
// try {
// Student s = student.newInstance();
// s.setId(e.get);
// } catch (Exception e1) {
// e1.printStackTrace();
// }
//
// return null;
// }


public static Student nodeToBean(Element e, Class<Student> class1) {
try {
Student s = class1.newInstance();
s.setId(e.attributeValue("id"));
s.setName(e.element("name").getText());
s.setAge(e.element("age").getText());


return s;
} catch (Exception e1) {
throw new RuntimeException(e1);
}


}
}


0 0
原创粉丝点击