这几天复习java知识就顺便弄了一个这么一个小的Demo案例跟大家分享一下。 如果按照这个目录一点点的搭建起来 。代码下边都有 基本是可以正常运行的 。如果有问题的话 大家可以加微信(QQ) 354032267 一起交流、、共同进步。。
目录结构
我就直接把每部分的代码贴出来吧。
- IStudentDao.java
package dao;
import java.util.List;
import entity.Student;
public interface IStudentDao {
public List<Student> findAll();
public boolean addStudent(Student student);
public boolean deleteStudent(String sno);
}
- StudentDaoImpl.java
package dao.impl;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
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.DOMException;
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 dao.IStudentDao;
import entity.Student;
public class StudentDaoImpl implements IStudentDao {
@Override
public List<Student> findAll() {
List<Student> all = new ArrayList<Student>();;
try {
//创建解析器工厂对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//创建解析器对象
DocumentBuilder db=factory.newDocumentBuilder();
//获取文档对象
Document doc=db.parse(new File("db\\student.xml"));
//获取根节点
Element rootEle=doc.getDocumentElement();
NodeList nodeList=rootEle.getElementsByTagName("student");
for (int i = 0; i < nodeList.getLength(); i++) {
Student student=new Student();
Node studentNode=nodeList.item(i);
//为了获取标签中的属性,所以要将Node向下转型
Element studentEle=(Element) studentNode;
//可以根据属性名称获取属性的值
String sno=studentEle.getAttribute("sno");
student.setSno(sno);
//获取Student节点下的所有子节点
NodeList studentChild=studentNode.getChildNodes();
for (int j = 0; j < studentChild.getLength(); j++) {
Node studentChildNode=studentChild.item(j);
if(studentChildNode.getNodeName().equals("sname")){
student.setSname(studentChildNode.getTextContent());
}
if(studentChildNode.getNodeName().equals("sex")){
student.setSex(studentChildNode.getTextContent());
}
if(studentChildNode.getNodeName().equals("age")){
student.setAge(Integer.parseInt(studentChildNode.getTextContent()));
}
}
all.add(student);
}
} catch (DOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return all;
}
@Override
public boolean addStudent(Student student) {
boolean flag=false;
try {
//创建解析器工厂对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//创建解析器对象
DocumentBuilder db=factory.newDocumentBuilder();
//获取文档对象
Document doc=db.parse(new File("db\\student.xml"));
//获取根节点
Element rootEle=doc.getDocumentElement();
//创建名称为student的节点
Element studentEle=doc.createElement("student");
Element snameEle=doc.createElement("sname");
Element sexEle=doc.createElement("sex");
Element ageEle=doc.createElement("age");
//为student节点设置属性
studentEle.setAttribute("sno",student.getSno());
//给节点添加元素内容
snameEle.setTextContent(student.getSname());
sexEle.setTextContent(student.getSex());
ageEle.setTextContent(String.valueOf(student.getAge()));
//设置关系
studentEle.appendChild(snameEle);
studentEle.appendChild(sexEle);
studentEle.appendChild(ageEle);
//设置student为根节点students的子节点
rootEle.appendChild(studentEle);
//将DOM模型转成XML文件
TransformerFactory tranFactory=TransformerFactory.newInstance();
Transformer tran=tranFactory.newTransformer();
Source xmlSource=new DOMSource(doc);
OutputStream outputStream=new FileOutputStream(new File("db\\student.xml"));
Result outputTarget=new StreamResult(outputStream);
tran.transform(xmlSource, outputTarget);
flag=true;
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (TransformerConfigurationException e) {
e.printStackTrace();
}catch (TransformerException e) {
e.printStackTrace();
}
return flag;
}
@Override
public boolean deleteStudent(String sno) {
boolean flag=false;
try {
//创建解析器工厂对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//创建解析器对象
DocumentBuilder db=factory.newDocumentBuilder();
//获取文档对象
Document doc=db.parse(new File("db\\student.xml"));
//获取根节点
Element rootEle=doc.getDocumentElement();
NodeList nodeList=rootEle.getElementsByTagName("student");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node=nodeList.item(i);
Element ele=(Element) node;
String no=ele.getAttribute("sno");
if(no.equals(sno)){
rootEle.removeChild(node);
break;
}
}
//将DOM模型转成XML文件
TransformerFactory tranFactory=TransformerFactory.newInstance();
Transformer tran=tranFactory.newTransformer();
Source xmlSource=new DOMSource(doc);
OutputStream outputStream=new FileOutputStream(new File("db\\student.xml"));
Result outputTarget=new StreamResult(outputStream);
tran.transform(xmlSource, outputTarget);
flag=true;
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (TransformerConfigurationException e) {
e.printStackTrace();
}catch (TransformerException e) {
e.printStackTrace();
}
return flag;
}
}
3.实体类 Student.java
package entity;
public class Student {
private String sno;
private String sname;
private String sex;
private int age;
public Student() {
super();
}
public Student(String sno, String sname, String sex, int age) {
super();
this.sno = sno;
this.sname = sname;
this.sex = sex;
this.age = age;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return sno+"\t"+sname+"\t"+sex+"\t"+age;
}
}
- 运行 :Menu.java
package menu;
import java.util.List;
import java.util.Scanner;
import org.apache.log4j.Logger;
import dao.IStudentDao;
import dao.impl.StudentDaoImpl;
import entity.Student;
public class Menu {
private static Logger logger=Logger.getLogger(Menu.class);
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
IStudentDao sm=new StudentDaoImpl();
while(true){
System.out.println("*********学生管理系统**********");
System.out.println("1、增加学生");
System.out.println("2、学生列表");
System.out.println("3、删除学生");
System.out.println("****************************");
System.out.println("请选择:");
int choice=input.nextInt();
switch (choice) {
case 1:
System.out.println("学生管理系统>增加学生");
System.out.println("请输入学生编号:");
String sno=input.next();
System.out.println("请输入学生姓名:");
String name=input.next();
System.out.println("请输入学生的性别:");
String sex=input.next();
System.out.println("请输入学生年龄:");
int age=input.nextInt();
//实例化和初始化
Student s=new Student(sno, name, sex, age);
boolean isAdd=false;
try {
isAdd = sm.addStudent(s);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
logger.error(e.getMessage());
}
if(isAdd){
System.out.println("增加成功!");
}else{
System.out.println("增加失败!");
}
break;
case 2:
System.out.println("学生管理系统>学生列表");
List<Student> all=sm.findAll();
if(!all.isEmpty()){
System.out.println("学号\t姓名\t性别\t年龄");
for (int i = 0; i < all.size(); i++) {
Student student=(Student) all.get(i);
System.out.println(student);
}
}else{
System.out.println("======sorry,暂无数据!= ========");
}
break;
case 3:
System.out.println("学生管理系统>删除学生");
System.out.println("请输入要删除的学生编号:");
String sno1=input.next();
boolean isDel=false;
try {
isDel=sm.deleteStudent(sno1);
} catch (IllegalArgumentException e) {
logger.error(e.getMessage());
}
if(isDel){
System.out.println("删除成功!");
}else{
System.out.println("删除失败!");
}
break;
default:
break;
}
}
}
}
- 列表内容 log4j.properties 配置
log4j.rootLogger=debug,myfile
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.err
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
log4j.appender.myfile=org.apache.log4j.FileAppender
log4j.appender.myfile.File=log/student.log
log4j.appender.myfile.layout=org.apache.log4j.PatternLayout
log4j.appender.myfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %p %m%n
log4j的jar文件 自己去下载。。。
XML student.dtd 文件
<!ELEMENT students (student*)>
<!ELEMENT student (sname,sex,age?)>
<!ATTLIST student sno CDATA #REQUIRED>
<!ELEMENT sname (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT age (#PCDATA)>
Xml文件 student.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<students>
<student sno="1001">
<sname>张三</sname>
<sex>男</sex>
<age>23</age>
</student>
<student sno="1002">
<sname>李影</sname>
<sex>女</sex>
<age>22</age>
</student>
<student sno="1003">
<sname>王五</sname>
<sex>男</sex>
<age>23</age>
</student>
<student sno="1004">
<sname>路正</sname>
<sex>男</sex>
<age>21</age>
</student>
</students>
如果我的这篇博文 有助于您了解基础的xml解析的话,您可以可以随便赏点小编。