對XML檔案進行的新增、刪除、修改、查詢操作。
阿新 • • 發佈:2019-02-08
整個類 和 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