用dom4j实现xml操作

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("没有");
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值