XML 檔案
<?xml version="1.0" encoding="UTF-8" standalone="no"?><kao>
<student kaohao="438" idcard="370101">
<name>郭美美</name>
<location>湖南</location>
<age>100</age>
</student>
</kao>
Stduent.domain包
package com.xmldom.student;
public class Student {
private String kaohao;
private String idcard;
private String name;
private String location;
private int age ;
public Student(String kaohao, String idcard, String name, String location, int age) {
super();
this.kaohao = kaohao;
this.idcard = idcard;
this.name = name;
this.location = location;
this.age = age;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
public String getKaohao() {
return kaohao;
}
public void setKaohao(String kaohao) {
this.kaohao = kaohao;
}
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [kaohao=" + kaohao + ", idcard=" + idcard + ", name=" + name + ", location=" + location
+ ", age=" + age + "]";
}
}
Studentdao
package com.dao;
import com.xmldom.student.Student;
public interface StudentDao {
//增删改查
/**
* 添加學生到XML
* @param s 封裝了要儲存的學生資訊
* @return 成功true ,否則傳回false
*/
public abstract boolean add(Student s) ;
/**
*
* @param name 根據學生的姓名來删除
* @return 删除成功傳回true,失敗或者不存在傳回false.
*/
public abstract boolean delStudentByName(String name);
/**
*
* @param idcard 根據身份證查詢學生
* @return 找到了就傳回學生,沒有就傳回NULL
*/
public abstract Student findStudent(String idcard);
}
daoImpl
package com.dao;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.xmldom.student.Student;
import jaxp.util.JavaxpUitl;
public class StudentDaoImpl implements StudentDao {
@Override
public boolean add(Student s) {
// 加載XML
boolean b = false;
try {
Document d = JavaxpUitl.getDocument();
// 添加<student></student> 節點
Element e = d.createElement("student");
// 給他設定屬性
e.setAttribute("idcard", s.getIdcard());
e.setAttribute("kaohao", s.getKaohao());
// 添加3個子節點 name location age
Element nameE = d.createElement("name");
// 添加文本内容
nameE.setTextContent(s.getName());
Element locationE = d.createElement("location");
// 添加文本内容
locationE.setTextContent(s.getLocation());
Element ageE = d.createElement("age");
// 添加文本内容
// ageE.setTextContent(String.valueOf(s.getAge()));
ageE.setTextContent("" + s.getAge());
// 把3個節點添加student标簽上
e.appendChild(nameE);
e.appendChild(locationE);
e.appendChild(ageE);
// 再把student 添加到kao 下
Node k = d.getElementsByTagName("kao").item();
k.appendChild(e);
// 寫回到XML中
JavaxpUitl.writeXml(d);
b = true;
} catch (Exception e) {
// 編譯時異常轉化為運作時異常
throw new RuntimeException();
}
return b;
}
@Override
public boolean delStudentByName(String name) {
// 加載XML
boolean b = false;
try {
Document d = JavaxpUitl.getDocument();
// 得到name節點集合 元素下的文本進行比較相同就删除 name 有多個
NodeList nl = d.getElementsByTagName("name");
// 周遊進行判斷
for (int i = ; i < nl.getLength(); i++) {
if (nl.item(i).getTextContent().equals(name)) {
// 就直接删除student
Node kao = d.getElementsByTagName("kao").item();
kao.removeChild(nl.item(i).getParentNode());
// 寫會文檔
JavaxpUitl.writeXml(d);
b = true;
}
}
} catch (Exception e) {
// 把編譯時期的異常轉換為運作時期
throw new RuntimeException();
}
return b;
}
@Override
public Student findStudent(String idcard) {
// 加載XML
Student s = null;
try {
Document d = JavaxpUitl.getDocument();
// 得到student節點集合的屬性進行判斷
NodeList nl = d.getElementsByTagName("student");
// 元素才可以調用屬性進行判斷
for (int i = ; i < nl.getLength(); i++) {
Node n = nl.item(i);
// 如果是元素
if (n.getNodeType() == Node.ELEMENT_NODE) {
Element e = (Element) n;
if (e.getAttribute("idcard").equals(idcard)) {
// 就把這個student元素 中的内容指派給Student
s = new Student();
s.setIdcard(e.getAttribute("idcard"));
s.setKaohao(e.getAttribute("kaohao"));
s.setAge(Integer.parseInt(e.getElementsByTagName("age").item().getTextContent()));
s.setLocation(e.getElementsByTagName("location").item().getTextContent());
s.setName(e.getElementsByTagName("name").item().getTextContent());
}
}
}
} catch (Exception e) {
throw new RuntimeException();
}
//
return s;
}
}
加載XML的工具類
package jaxp.util;
//加載和解析的XML的工具類
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class JavaxpUitl {
// 加載XML
public static Document getDocument() throws ParserConfigurationException, SAXException, IOException {
// Document 生成的工廠
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
// 加載XML生成document
Document d = db.parse("myx.xml");
return d;
}
// 寫回資料到XML中
public static void writeXml(Document d) throws TransformerException {
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
// 調用轉化方法
tf.transform(new DOMSource(d), new StreamResult("myx.xml"));
}
}
測試類
package student.test;
import com.dao.StudentDao;
import com.dao.StudentDaoImpl;
import com.xmldom.student.Student;
public class StudentTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentDao d = new StudentDaoImpl();
/*
* Student s = new Student();
*
* s.setAge(22); s.setIdcard("2423"); s.setKaohao("3333");
* s.setLocation("sichjan"); s.setName("zhan3"); d.add(s);
*
* s= d.findStudent("2423"); System.out.println(s);
*/
System.out.println(d.delStudentByName("zhan3"));
}
}