步骤一:
编写一个学生类的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<students1>
<!-- 书写方式一 -->
<student>
<sid>1</sid>
<sname>张山</sname>
<sgender>20</sgender>
<stel>234234</stel>
</student>
<student>
<sid>2</sid>
<sname>李四</sname>
<sgender>210</sgender>
<stel>234234</stel>
</student>
<!-- 书写方式二 推荐使用该书写方式-->
<student id="1">
<sname>张山</sname>
<sgender>20</sgender>
<stel>234234</stel>
</student>
<student id="2">
<sname>李四</sname>
<sgender>210</sgender>
<stel>234234</stel>
</student>
<!-- 书写方式三 -->
<student id="1" name="张山" grade="20">
</student>
<student id="1" name="李四" grade="210">
</student>
</students1>
步骤二:
创建一个学生类来存放xml里的学生数据:
public class Student {
private String sid;
private String sname;
private String sgender;
private String stel;
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSgender() {
return sgender;
}
public void setSgender(String sgender) {
this.sgender = sgender;
}
public String getStel() {
return stel;
}
public void setStel(String stel) {
this.stel = stel;
}
public Student(String sid, String sname, String sgender, String stel) {
super();
this.sid = sid;
this.sname = sname;
this.sgender = sgender;
this.stel = stel;
}
public Student() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Student [sid=" + sid + ", sname=" + sname + ", sgender=" + sgender + ", stel=" + stel + "]";
}
}
步骤三 :
创建Demo测试类来实现对上述xml中DOM数中数据的读、写、删除以及修改等操作。
public class Demo {
public static void main(String[] args) throws DocumentException {
String xmlfile ="src/students_1.xml";
List<Student> datas=readAllStudents1(xmlfile);
System.out.println(datas);
}
//获取学生suo
private static List<Student> readAllStudents1(String xml) throws DocumentException {
//把学生类放到list集合里
List<Student> list = new ArrayList<Student>();
//创建SAXReader的对象来读取xml中的数据
SAXReader reader=new SAXReader();
Document document= reader.read(xml);
//得到根元素
Element root = document.getRootElement();
//创建Iterator迭代器
Iterator<Element> it=root.elementIterator();
Student student =null;
while (it.hasNext()){
Element stu = it.next();
//通过elementText来读取标签里的内容
String name =stu.elementText("same");
String id =stu.elementText("sid");
String sgender =stu.elementText("sgender");
String stl =stu.elementText("stel");
//创建含有信息数据的student对象
student = new Student(id,name,sgender,stl);
//把该学生对象放到list集合中
list.add(student);
}
return list;
}
//更新某个学生的信息
private static void updateStudent(Student stu,String xml) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(xml);
Element root = document.getRootElement();
Iterator<Element> it = root.elementIterator();
Element findUpdateElement = null;
while(it.hasNext()) {
Element e = it.next();
if(e.attributeValue("sid").equals(stu.getSid())) {
findUpdateElement = e;
break;
}
}
if(findUpdateElement!=null) {
//实现修改
findUpdateElement.element("sname").setText(stu.getSname());
findUpdateElement.element("sgender").setText(stu.getSgender());
findUpdateElement.element("stel").setText(stu.getStel());
//保存;
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(xml),format);
xmlWriter.write(document);
xmlWriter.close();
}
}catch(Exception e) {}
}
//通过id删除某个学生数据
private static void removeStudent(String sid,String xml) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(xml);
Element root = document.getRootElement();
Iterator<Element> it = root.elementIterator();
Element findElement = null;
while(it.hasNext()) {
Element tmp = it.next();
if(tmp.attributeValue("sid").equals(sid)) {
findElement = tmp;
break;
}
}
if(findElement!=null) {
//实现删除;
root.remove(findElement);
//重新保存document;
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(xml),format);
xmlWriter.write(document);
xmlWriter.close();
}
}catch(Exception e) {}
}
//添加学生数据
private static void addStudent(Student student,String xml) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(xml);
Element root = document.getRootElement();//拿根元素;
//在根元素下添加子元素;
Element element = root.addElement("student"); //返回添加的元素对象;
//设置元素的属性
element.addAttribute("sid", student.getSid());
//添加三个子元素;
element.addElement("sname").setText(student.getSname());
element.addElement("sgender").setText(student.getSgender());
element.addElement("stel").setText(student.getStel());
//内存中的根元素多了student元素;
//保存doucument -- 需要流
//格式化
OutputFormat format = OutputFormat.createPrettyPrint();
//format.setEncoding("GBK");
//XMLWriter xmlWriter=new XMLWriter(new FileWriter(xml),format);
XMLWriter xmlWriter=new XMLWriter(new FileOutputStream(xml),format);
xmlWriter.write(document);
xmlWriter.close();
}catch(Exception e) {}
}
//通过id获取学生数据
private static Student get(String sid,String xml) {
Student student = null;
try {
SAXReader saxReader = new SAXReader();
Document document =saxReader.read(xml);
Element root =document.getRootElement();
Iterator<Element> it = root.elementIterator();
while(it.hasNext()) {
Element stuElement =it.next();
String idAttrValue = stuElement.attributeValue("sid");
if(idAttrValue.equals(sid)) {
String sname = stuElement.elementText("sname");
String sgender=stuElement.elementText("sgender");
String stel = stuElement.elementText("stel");
student = new Student(sid, sname, sgender, stel);
break;
}
}
}catch(Exception e) {}
return student;
}
}