xml基础知识(4)

xiaoxiao2021-02-28  118

实例:通过xml完成简单的学生成绩管理 需求:功能一览: 添加用户(a) 删除用户(b) 查询用户(c) 请输入操作类型: 添加功能模块: 添加用户(a) 删除用户(b) 查询用户(c) 请输入操作类型: 请输入学生姓名: 请输入学生准考证号: 请输入学生身份证号: 请输入学生所在地: 请输入学生成绩: ---------------添加数据成功----------------------------------- 查询功能模块: 添加用户(a) 删除用户(b) 查询用户(c) 请输入操作类型: 请输入学生准考证号: 您查询的学生信息为: ---------------查询数据成功----------------------------------- 删除功能模块: 添加用户(a) 删除用户(b) 查询用户(c) 请输入操作类型: 请输入删除的学生姓名: ---------------已成功删除----------------------------------- 具体代码: 考试xml: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <exam> <student examid="222" idcast="111"> <name>张三</name> <location>北京</location> <grade>89</grade> </student> <student examid="444" idcast="333"> <name>李四</name> <location>上海</location> <grade>91</grade> </student> </exam> 工具包:(用于解析文件,以及将修改的文件写入xml) package 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; public class XmlUtils { //xml路径   public static String fileName = "src/exam.xml"; /** * 解析xml文件 * @return * @throws Exception */ public static Document getDocument() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); return builder.parse(fileName); } /** * 将修改的文件写入xml中 * @param document * @throws Exception */ public static void write2xml(Document document) throws Exception{   TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream(fileName))); } } model包: package model; public class StudentModel { private String idcast; private String examid; private String name; private String location; private double grade; public double getGrade() { return grade; } public void setGrade(double grade) { this.grade = grade; } public String getIdcast() { return idcast; } public void setIdcast(String idcast) { this.idcast = idcast; } 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; } } dao包: package dao; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import exception.StudentNotExistException; import utils.XmlUtils; import model.StudentModel; public class StudentDao { public void addData(StudentModel s) { try { //解析文件 Document document = XmlUtils.getDocument(); //创建student元素 Element studentData = document.createElement("student"); studentData.setAttribute("idcast", s.getIdcast()); studentData.setAttribute("examid", s.getExamid()); //创建student的子元素 Element studentName = document.createElement("name"); Element studentLocation = document.createElement("location"); Element studentGrade = document.createElement("grade"); //给子元素添加内容 studentName.setTextContent(s.getName()); studentLocation.setTextContent(s.getLocation()); studentGrade.setTextContent(s.getGrade()+""); //将子元素放到student下面 studentData.appendChild(studentName); studentData.appendChild(studentLocation); studentData.appendChild(studentGrade); //将student元素放进exam中 document.getElementsByTagName("exam").item(0).appendChild(studentData); //更改xml文件 XmlUtils.write2xml(document); } catch (Exception e) { throw new RuntimeException(e); } } public StudentModel selectData(String examid) { try { //解析xml文件 Document document = XmlUtils.getDocument(); //获取所有的学生信息 NodeList list = document.getElementsByTagName("student"); for(int i=0;i<list.getLength();i++){ Element studentData = (Element)list.item(i); //挑选出准开征号相同的ID的学生,输出 if(studentData.getAttribute("examid").equals(examid)){ StudentModel student = new StudentModel(); student.setIdcast(studentData.getAttribute("idcast")); student.setExamid(examid); student.setName(studentData.getElementsByTagName("name").item(0).getTextContent()); student.setLocation(studentData.getElementsByTagName("location").item(0).getTextContent()); student.setGrade(Double.parseDouble(studentData.getElementsByTagName("grade").item(0).getTextContent())); return student; } } return null; } catch (Exception e) { throw new RuntimeException(e);  } } public void deleteData(String name) throws StudentNotExistException { try { //解析xml文件 Document document = XmlUtils.getDocument(); //挑选出姓名是指定姓名的学生,删除 NodeList list = document.getElementsByTagName("name"); for(int i=0;i<list.getLength();i++){ Element studentName = (Element)list.item(i); //删除操作 if(studentName.getTextContent().equals(name)){ studentName.getParentNode().getParentNode().removeChild(studentName.getParentNode()); //更改xml文件 XmlUtils.write2xml(document); return; } } throw new StudentNotExistException(name + "不存在"); }catch (StudentNotExistException e) { throw e ;  } catch (Exception e) { throw new RuntimeException(e);  } } } exception包:(删除时加入输入错误数据需要抛出异常) package 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 } } 用于界面交互的UI包: package UI; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import model.StudentModel; import dao.StudentDao; import exception.StudentNotExistException; public class Main { /** * @param args */ public static void main(String[] args) throws IOException { try { System.out.println("添加学生(a)    删除学生(b)    查找学生(c)"); System.out.println("请输入操作类型:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String type = br.readLine(); if("a".equals(type)){ System.out.println("请输入学生姓名:"); String name = br.readLine(); System.out.println("请输入学生准考证号:"); String examid = br.readLine(); System.out.println("请输入学生身份证号:"); String idcast = br.readLine(); System.out.println("请输入学生所在地:"); String location = br.readLine(); System.out.println("请输入学生成绩:"); String grade = br.readLine(); StudentModel s = new StudentModel(); s.setIdcast(idcast); s.setExamid(examid); s.setName(name); s.setLocation(location); s.setGrade(Double.parseDouble(grade)); StudentDao dao = new StudentDao(); dao.addData(s); System.out.println("添加成功"); }else if ("b".equals(type)) { System.out.println("请输入要删除的学生姓名:"); String name = br.readLine(); try { StudentDao dao = new StudentDao(); dao.deleteData(name); System.out.println("删除成功"); } catch (StudentNotExistException e) { System.out.println("您要删除的用户不存在"); } }else if ("c".equals(type)) { System.out.println("请输入要查找的学生准考证号:"); String idcast = br.readLine(); StudentDao dao = new StudentDao(); dao.selectData(idcast); System.out.println("查找成功"); }else { System.out.println("不支持您的操作"); } } catch (Exception e) { e.printStackTrace(); System.out.println("对不起,出错了"); } } } 测试用的test包: package test; import model.StudentModel; import org.junit.Test; import dao.StudentDao; public class xmlTest { @Test public void testAdd() throws Exception{ StudentDao dao = new StudentDao(); StudentModel student = new StudentModel(); student.setIdcast("993"); student.setExamid("999"); student.setName("aaa"); student.setLocation("天津"); student.setGrade(21); dao.addData(student); } @Test public void testSelectData(){ StudentDao dao = new StudentDao(); dao.selectData("222"); } @Test public void testDeleteData() throws Exception{ StudentDao dao = new StudentDao(); dao.deleteData("aserfwer"); } }
转载请注明原文地址: https://www.6miu.com/read-33612.html

最新回复(0)