1. 程式人生 > >對XML檔案進行的新增、刪除、修改、查詢操作。

對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,
			UnsupportedEncodingException, 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