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"));
}
}