DOM解析XML文档实例之学生管理系统
2016-10-06 11:55
417 查看
/** *@ author StormMaybin *@ date 2016-10-06 */
生命不息,奋斗不止!
需求分析:
用XML文档来保存学生信息,
通过对XML文档的增删改,来实现管理学生信息的功能。
主体结构
学生类
package com.stormma.domain; public class Student { private String idCard; private String examId; private String name; private String location; private double grade; public String getIdCard() { return idCard; } public void setIdCard(String idCard) { this.idCard = idCard; } public String getExamId() { return examId; } public void setExamId(String examId) { this.examId = examId; } 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 double getGrade() { return grade; } public void setGrade(double grade) { this.grade = grade; } @Override public String toString() { // TODO Auto-generated method stub return "姓名: "+this.name +"\r\n"+"身份证号:"+this.idCard +"\r\n"+"准考证号:"+this.examId +"\r\n"+"出生地:"+this.location +"\r\n"+"成绩:"+this.grade; } }
XML工具类
package com.stormma.utils; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; /** * @author StormMaybin writeToXML()方法 getDocument()方法 */ public class XMLUtils { private static final String fileName = "src/exam.xml"; public static Document getDocument() throws Exception { // 获得工厂实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 获得解析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 解析文档 return builder.parse(fileName); } public static void writeToXML(Document document) throws Exception { Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(document), new StreamResult( new FileOutputStream(fileName))); } }
操作XML文档的StudentDao类
package com.stormma.dao; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import com.stormma.domain.Student; import com.stormma.exception.StudentNotExistException; import com.stormma.utils.XMLUtils; /** * 用来和数据库(XML文件)交互 * @author StormMaybin * 操作:添加学生、查询学生、删除学生 */ public class StudentDao { public void add (Student s) { try { //得到对应XML文档对象 Document document = XMLUtils.getDocument(); //创建学生标签 Element student_tag = document.createElement("student"); //设置student标签的属性 student_tag.setAttribute("idCard", s.getIdCard()); student_tag.setAttribute("examId", s.getExamId()); //创建student标签的子标签 Element name = document.createElement("name"); Element location = document.createElement("location"); Element grade = document.createElement("grade"); //设置标签内容 name.setTextContent(s.getName()); location.setTextContent(s.getLocation()); grade.setTextContent(s.getGrade()+""); //建立标签关系 student_tag.appendChild(name); student_tag.appendChild(location); student_tag.appendChild(grade); //得到student父节点 Element exam = (Element) document.getElementsByTagName("exam").item(0); exam.appendChild(student_tag); //更新文档内容 XMLUtils.writeToXML(document); } catch (Exception e) { // TODO Auto-generated catch block //异常转型 throw new RuntimeException(e); } } public Student find (String examId) { try { //得到对应XML文档对象 Document document = XMLUtils.getDocument(); //得到学生标签集合 NodeList sList = document.getElementsByTagName("student"); for (int i = 0; i < sList.getLength(); i++) { Element student = (Element) sList.item(i); if (student.getAttribute("examId").equals(examId)) { //封装学生对象,返回 Student s = new Student(); s.setExamId(examId); s.setIdCard(student.getAttribute("idCard")); s.setName(student.getElementsByTagName("name").item(0).getTextContent()); s.setLocation(student.getElementsByTagName("location").item(0).getTextContent()); s.setGrade(Double.parseDouble(student.getElementsByTagName("grade").item(0).getTextContent())); //返回学生对象 return s; } } return null; } catch (Exception e) { // TODO Auto-generated catch block // e.printStackTrace(); throw new RuntimeException(e); } } public void delete (String name) throws StudentNotExistException { try { //得到对应XML文档对象 Document document = XMLUtils.getDocument(); //得到学生姓名集合 NodeList nList = document.getElementsByTagName("name"); for (int i = 0; i < nList.getLength(); i++) { if (nList.item(i).getTextContent().equals(name)) { nList.item(i).getParentNode().getParentNode().removeChild(nList.item(i).getParentNode()); //更新文档 XMLUtils.writeToXML(document); return; } } throw new StudentNotExistException(name+"不存在"); } catch (StudentNotExistException e) { throw e; } catch (Exception e) { // TODO Auto-generated catch block throw new RuntimeException(e); } } }
程序入口
package com.stormma.ui; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; import com.stormma.dao.StudentDao; import com.stormma.domain.Student; import com.stormma.exception.StudentNotExistException; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub meun(); // BufferedReader br = new BufferedReader(new // InputStreamReader(System.in)); Scanner br = new Scanner(System.in); while (br.hasNext()) { try { String type = br.next(); if (type.equals("a")) { System.out.println("请输入要添加学生的姓名 "); String name = br.next(); System.out.println("请输入要添加学生的准考证号 "); String examId = br.next(); System.out.println("请输入要添加学生的身份证号 "); String idCard = br.next(); System.out.println("请输入要添加学生的出生地 "); String location = br.next(); System.out.println("请输入要添加学生的分数 "); String grade = br.next(); Student s = new Student(); s.setExamId(examId); s.setName(name); s.setGrade(Double.parseDouble(grade)); s.setLocation(location); s.setIdCard(idCard); StudentDao sd = new StudentDao(); sd.add(s); System.out.println("添加成功"); } else if (type.equals("b")) { System.out.println("请输入你要删除的学生的姓名"); String name = br.next(); try { StudentDao sd = new StudentDao(); sd.delete(name); System.out.println("删除成功"); } catch (StudentNotExistException e) { System.out.println("您要删除的学生不存在"); } } else if (type.equals("c")) { System.out.println("请输入你要查询的学生的准考证号"); String examId = br.next(); StudentDao sd = new StudentDao(); if (sd.find(examId) != null) { System.out.println(sd.find(examId)); } else { System.out.println("您要查找的学生不存在"); } } else { System.out.println("请键入正确的操作"); } } catch (Exception e) { e.printStackTrace(); System.out.println("系统正忙······"); } } } public static void meun() { System.out.println("********欢迎进入学生管理系统********"); System.out.println("\t添加用户:a"); System.out.println("\t删除用户:b"); System.out.println("\t查找用户:c"); System.out.println("*********************************"); System.out.print("请选择:"); } }
自定义异常
package com.stormma.exception; public class StudentNotExistException extends Exception { public StudentNotExistException() { // TODO Auto-generated constructor stub } public StudentNotExistException(String message) { super(message); // TODO Auto-generated constructor stub } public StudentNotExistException(Throwable cause) { super(cause); // TODO Auto-generated constructor stub } public StudentNotExistException(String message, Throwable cause) { super(message, cause); // TODO Auto-generated constructor stub } public StudentNotExistException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); // TODO Auto-generated constructor stub } }
源码连接:XML案例之学生管理系统
相关文章推荐
- xml-dom解析-简单的学生信息管理系统
- XML---学生成绩管理系统 之 DOM解析 [方立勋视频讲解]
- java版学生成绩管理系统(增删改查+数据用xml文档存储)
- xml的实例--学生管理系统
- Java解析XML文档(简单实例)——dom解析xml
- Java---DOM解析XML文档详解实例
- 利用DOM解析XML文档实例
- XML(一) DOM解析XML文档实例一
- Java解析XML文档(简单实例)——dom解析xml
- 利用DOM解析XML文档实例
- 使用DOM解析XML文档示例(Java)
- Java解析XML文档——dom解析xml
- 解析XML文档方式之一:dom方式
- SAX和DOM解析XML文档的区别
- Java中使用DOM来解析xml文档
- Java解析XML文档——dom解析xml (转载)
- java中用dom解析xml的经典入门级文档
- Java解析XML文档——dom解析xml (转载)
- 数据表设计实例文档版本管理系统表设计
- DOM 解析 XML 文档