https://blog.csdn.net/HeSasa/article/details/82917516在之前的基础上改写
要导入的包:
dom4jUtil.java
package utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class dom4jUtil {
public static Document getDocument() throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/exam.xml"));
return document;
}
public static void updateXML(Document document) throws IOException {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/exam.xml"),format);
writer.write(document);
writer.close();
}
}
dom4jDao.java
package dao;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import domain.Student;
import utils.dom4jUtil;
public class dom4jDao {
public void add(Student s) {
Document document;
try {
document = dom4jUtil.getDocument();
Element studentNode = DocumentHelper.createElement("student");
studentNode.addAttribute("examid", s.getExamid());
studentNode.addAttribute("idcard", s.getIdcard());
//向指定节点上挂节点的便捷方式
studentNode.addElement("name").setText(s.getName());
studentNode.addElement("location").setText(s.getLocation());
studentNode.addElement("gradeNode").setText(s.getGrade()+"");
document.getRootElement().add(studentNode);
dom4jUtil.updateXML(document);
} catch (Exception e) {
throw new RuntimeException();
}
}
public void delete(String name){
try {
Document document = dom4jUtil.getDocument();
List list = document.selectNodes("//name");
Iterator it = list.iterator();
while(it.hasNext()) {
Element name_node = (Element) it.next();
if(name_node.getText().equals(name)) {
name_node.getParent().getParent().remove(name_node.getParent());
dom4jUtil.updateXML(document);
return;
}
}
throw new RuntimeException("找不到要删除的学生!");
} catch (Exception e1) {
throw new RuntimeException(e1);
}
}
public Student find(String examid) {
try {
Document document = dom4jUtil.getDocument();
Element node = (Element) document.selectSingleNode("//student[@examid='"+examid+"']");
if(node!=null) {
Student s = new Student();
s.setExamid(node.attributeValue("examid"));
s.setIdcard(node.attributeValue("idcard"));
s.setName(node.element("name").getText());
s.setLocation(node.element("location").getText());
s.setGrade(Double.parseDouble(node.element("grade").getText()));
return s;
}else {
return null;
}
} catch (DocumentException e1) {
throw new RuntimeException(e1);
}
}
}
Main.java
package view;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import org.dom4j.DocumentException;
import org.xml.sax.SAXException;
import dao.dom4jDao;
import domain.Student;
public class Main {
public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException, TransformerException, DocumentException {
System.out.println("添加用户:(a) 删除用户:(b) 查询成绩:(c)");
System.out.println("请输入操作类型:");
Student student = new Student();
//StudentDao stuDao = new StudentDao();
dom4jDao domDao = new dom4jDao();
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String type = bf.readLine();
if(type.equalsIgnoreCase("a")) {
System.out.println("请输入学生姓名:");
student.setName(bf.readLine());
System.out.println("请输入学生准考证号:");
student.setExamid(bf.readLine());
System.out.println("请输入学生身份证号:");
student.setIdcard(bf.readLine());
System.out.println("请输入学生所在地:");
student.setLocation(bf.readLine());
System.out.println("请输入学生成绩:");
student.setGrade(Double.parseDouble(bf.readLine()));
System.out.println("------添加数据成功------");
//stuDao.add(student);
domDao.add(student);
}else if(type.equalsIgnoreCase("b")) {
System.out.println("请输入删除的学生姓名:");
//stuDao.delete(bf.readLine());
domDao.delete(bf.readLine());
}else if(type.equalsIgnoreCase("c")) {
System.out.println("请输入查询的学生的准考证号:");
//stuDao.find(bf.readLine());
domDao.find(bf.readLine());
System.out.println("您查询的学生信息为:");
System.out.println("姓名:"+student.getName()+",身份证号:"+student.getIdcard()+",准考证号:"+student.getExamid()+",地区:"+student.getLocation()+",成绩:"+student.getGrade());
}else {
System.out.println("没有");
}
}
}