对XML文件进行的添加、删除、修改、查询操作

整个类 和 xml 以及其他文件中在包中的位置如下图:本代码需要导入包jaxen-1.1-beta-6.jar dom4j-1.6.1.jar

ui 表现层:StudentUI2 代码如下:

package test2.ui;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Scanner;
import test2.dao.StudentDao;
import test2.domain.Student;

//表现层
public class StudentUI2 {
	public static void main(String[] args) throws Exception {
		add();
	}

	// 修改
	public static void update() throws Exception {
		Scanner scanner = new Scanner(System.in);
		System.out.println("输入要修改的编号:");
		String id = scanner.nextLine();
		System.out.println("输入要修改后的姓名:");
		String name = scanner.nextLine();
		System.out.println("输入要修改的年龄:");
		String age = scanner.nextLine();
		Student stu = new Student();
		stu.setId(id);
		stu.setAge(age);
		stu.setName(name);
		new StudentDao().update(stu);
	}
//  读取
	public static void read() throws Exception {
		Scanner scanner = new Scanner(System.in);
		System.out.println("输入要查询的编号:");
		String id = scanner.nextLine();
		new StudentDao().read(id);
	}
// 删除
	public static void delete() throws Exception {
		Scanner scanner = new Scanner(System.in);
		System.out.println("输入要删除的编号:");
		String id = scanner.nextLine();
		new StudentDao().delete(id);

	}
// 添加
	public static void add() throws Exception {
		Scanner scanner = new Scanner(System.in);
		// 文件中存储的是当前添加对象的id值
		File f = new File("src/test2/ui/id.txt");
		BufferedReader bf = new BufferedReader(new FileReader(f));

		String id = bf.readLine();
		System.out.println("姓名:");
		String name = scanner.nextLine();
		System.out.println("年龄:");
		String age = scanner.nextLine();

		// 封装成java对象
		Student student = new Student();
		student.setId(id);
		student.setName(name);
		student.setAge(age);
		// 调用Dao对象
		StudentDao studao = new StudentDao();
		boolean flag = studao.create(student);
		if (flag) {
			System.out.println("操作成功!");
			//更新存储id的文本的值
			f.delete();
			PrintWriter pw = new PrintWriter(f);
			pw.println(Integer.parseInt(id) + 1);
			pw.flush();
			pw.close();
		} else {
			System.out.println("操作失败!");
		}
	}
}


dao 访问层:StudentDao

package test2.dao;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

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

import test2.domain.Student;
//访问层
public class StudentDao {
	//修改元素
	public void update(Student stu) throws Exception{
		String xpath = "//student[@id='"+stu.getId()+"']";
		Document doc = readxml(); 
		//获取符合条件的元素
		Element ele = (Element) doc.selectSingleNode(xpath);
		if(ele != null){
			ele.element("name").setText(stu.getName());
			ele.element("age").setText(stu.getAge());	
			write2XML(doc);
		}else{
			System.out.println("不存在!");
		}
		
	}
	
	//查询元素
	public void read(String id) throws Exception{
		String xpath = "//student[@id='"+id+"']";
		Document doc = readxml(); 
		Element ele = (Element) doc.selectSingleNode(xpath);
		if(ele != null){
			System.out.println("编号:"+ele.attributeValue("id"));
			System.out.println("姓名:"+ele.elementText("name"));
			System.out.println("年龄:"+ele.elementText("age"));
		}else{
			System.out.println("不存在!");
		}
	}
	
	//删除元素
	public void delete(String id) throws IOException,UnsupportedEncodingException,IOException{
		String xpath = "//student[@id='"+id+"']";
		Document doc = readxml(); 
		Element ele = (Element) doc.selectSingleNode(xpath);
		if(ele != null){
			//父节点删除子节点
			ele.getParent().remove(ele);
			write2XML(doc);
			System.out.println("删除成功!");
		}else{
			System.out.println("不存在!");
		}
	}
	
	//添加元素
	public boolean create(Student student) throws Exception{
		boolean flag = false;
		if(student !=null){
			Document doc = readxml(); 
			Element rootele = doc.getRootElement();
			Element studentele = rootele.addElement("student");
			studentele.addAttribute("id",student.getId());
			studentele.addElement("name").setText(student.getName());
			studentele.addElement("age").setText(student.getAge());
			write2XML(doc);
			flag=true;
		}
		return flag;
	}

	//读取硬盘中的xml文件到内存中
	private Document readxml() {
		SAXReader sax = new SAXReader();
		Document doc = null;
		try {
			doc = sax.read(new File("src/test2/db/Student.xml"));
		} catch (DocumentException e) {
			doc = DocumentHelper.createDocument();
			doc.addElement("student");
		}
		return doc;
	}
	//将内存中的xml写到文本硬盘文本中
	private void write2XML(Document doc) throws FileNotFoundException,IOException {
		OutputFormat opf = OutputFormat.createPrettyPrint();
		OutputStream os = new FileOutputStream("src/test2/db/Student.xml");
		XMLWriter xmlwriter = new XMLWriter(os,opf);
		xmlwriter.write(doc);
		xmlwriter.close();
	}
}


Student.xml数据层:

<?xml version="1.0" encoding="UTF-8"?>
<students>
  <student id="1">
    <name>jerry</name>
    <age>21</age>
  </student>
  <student id="2">
    <name>herry</name>
    <age>21</age>
  </student>
  <student id="3">
    <name>andy</name>
    <age>20</age>
  </student>
  <student id="4">
    <name>lulu</name>
    <age>21</age>
  </student>
  <student id="5">
    <name>jerry</name>
    <age>22</age>
  </student>
</students>


javabean student.java

package test2.domain;

public class Student {
	private String name;
	private String id;
	private String age;
	public Student(){}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		if(name.matches("[a-zA-Z]+")){
			this.name = name;
		}else{
			throw new RuntimeException("姓名");	
		}
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		if(id.matches("[0-9]+")){
			this.id = id;
		}else{
			throw new RuntimeException("编号");
		}
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		if(age.matches("[1-9][0-9]")){
			this.age = age;
		}else{
			throw new RuntimeException("年龄");
		}
	};
}


文本文件id.txt

6

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇