xml练习案例(使用DOM解析)

    xiaoxiao2021-12-13  21

    1、以如下格式的exam.xml文件为例

    <?xml version="1.0" encoding="UTF-8" standalone="no"?> <exam> <student idcard="111" examid="222"> <name>张三</name> <location>沈阳</location> <grade>89</grade> </student> <student idcard="333" examid="444"> <name>李四</name> <location>大连</location> <grade>97</grade> </student> </exam>

    2、编程实现如下功能

    3、实现学生信息的添加

    4、实现学生信息的查询

    5、实现学生的删除功能

    流程分析:

    交互的界面:ui:

    import java.util.Scanner; import com.heima.bean.Student; import com.heima.dao.StudentDao; public class StudentUI { static Scanner scan = new Scanner(System.in) ; static StudentDao dao = new StudentDao() ; public static void main(String[] args) { System.out.println("请选择操作: a) 添加学生 b) 查询学生 c) 删除学生" ); String op = scan.next() ; if("a".equalsIgnoreCase(op)){ addStudent() ; }else if("b".equalsIgnoreCase(op)){ findStudentByExamId() ; }else if("c".equals(op)){ removeStudentByName() ; }else{ System.out.println("没有此种操作"); } } //删除学生 private static void removeStudentByName() { System.out.println("请输入学生的姓名:"); String name = scan.next() ; //调用业务逻辑层完成功能 boolean flag = dao.delete(name); if(flag) System.out.println("---------删除成功-------------"); else System.out.println("---------删除失败-------------"); } //根据学生的准考证号查找学生 private static void findStudentByExamId() { System.out.println("请输入准考证号:"); String examid = scan.next() ; //调用dao层完成功能 Student stu = dao.findByExamId(examid) ; if(stu != null) System.out.println(stu); else System.out.println("此学生不存在"); } //添加一个学生 private static void addStudent() { Student s = new Student() ; System.out.println("请输入姓名:"); String name = scan.next() ; s.setName(name) ; System.out.println("请输入身份证号:"); String idcard = scan.next() ; s.setIdcard(idcard) ; System.out.println("请输入准考证号:"); String examid = scan.next() ; s.setExamid(examid) ; System.out.println("请输入地址:"); String location = scan.next() ; s.setLocation(location) ; System.out.println("请输入分数:"); String grade = scan.next() ; s.setGrade(Float.parseFloat(grade)) ; //调用dao层完成功能 boolean flag = dao.add(s) ; if(flag) System.out.println("----------添加成功------------------"); else System.out.println("----------添加失败------------------"); } }

    业务逻辑处理页面:dao

    import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.heima.bean.Student; import com.heima.util.JaxpUtils; //业务逻辑处理类 public class StudentDao { /** * 将学生添加到XML文件中 * @param student 要添加的学生 * @return 成功返回TRUE,否则FALSE */ public boolean add(Student student){ //加载dom树 Document document = JaxpUtils.getDocument() ; //拿到根节点 Element root = document.getDocumentElement() ; //创建一个student节点,及子节点 Element stu = document.createElement("student") ; Element nameEl = document.createElement("name") ; Element locationEl = document.createElement("location") ; Element gradeEl = document.createElement("grade") ; //为student子节点和属性赋值 stu.setAttribute("examid", student.getExamid()) ; stu.setAttribute("idcard", student.getIdcard()) ; nameEl.setTextContent(student.getName()) ; locationEl.setTextContent(student.getLocation()) ; gradeEl.setTextContent(student.getGrade() + "") ; //组合各个节点 stu.appendChild(nameEl) ; stu.appendChild(locationEl) ; stu.appendChild(gradeEl) ; //将student节点添加到根节点上 root.appendChild(stu) ; //将内存中的dom树保存到硬盘上 JaxpUtils.write2xml(document) ; return true ; } /** * 根据学生的姓名删除学生 * @param name 要删除学生的姓名 * @return 成功返回TRUE,否则返回FALSE */ public boolean delete(String name){ //加载dom树 Document document = JaxpUtils.getDocument() ; //获取所有的name节点 NodeList nl = document.getElementsByTagName("name") ; //循环判断 for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i) ; if(n.getTextContent().equals(name)){ //说明找到了要删除的学生 //爷爷干掉父亲 n.getParentNode().getParentNode().removeChild(n.getParentNode()) ; //将结果保存到硬盘上 JaxpUtils.write2xml(document) ; return true ; } } return false ; } /** * 根据准考证号查询学生 * @param examid 要查询学生的准考证号 * @return 成功返回此学生,否则返回null */ public Student findByExamId(String examid){ //加载dom树 Document document = JaxpUtils.getDocument() ; //拿取所有的学生节点 NodeList nl = document.getElementsByTagName("student") ; //循环拿取每个student节点的examid属性的值判断 for (int i = 0; i < nl.getLength(); i++) { Element stuNode = (Element)nl.item(i) ; if(stuNode.getAttribute("examid").equals(examid)){ //找到了此学生 //开始封装数据 Student s = new Student() ; s.setExamid(examid) ; s.setIdcard(stuNode.getAttribute("idcard")) ; s.setName(stuNode.getElementsByTagName("name").item(0).getTextContent()) ; s.setLocation(stuNode.getElementsByTagName("location").item(0).getTextContent()) ; s.setGrade(Float.parseFloat(stuNode.getElementsByTagName("grade").item(0).getTextContent())) ; return s ; } } return null ; } }

    封装数据:bean

    public class Student { private String idcard ; private String examid ; private String name ; private String location ; private float 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 float getGrade() { return grade; } public void setGrade(float grade) { this.grade = grade; } @Override public String toString() { return "Student [idcard=" + idcard + ", examid=" + examid + ", name=" + name + ", location=" + location + ", grade=" + grade + "]"; } }

    工具包:util:

    工具类:JaxpUtils.java:

    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.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; //工具类 public class JaxpUtils { //获取dom树 public static Document getDocument(){ //创建dom解析器 try { DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder() ; Document document = db.parse("src/exam.xml") ; return document ; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null ; } //保存dom树到硬盘上 public static void write2xml(Document document){ //创建 transformer对象 try { Transformer tf = TransformerFactory.newInstance().newTransformer() ; tf.transform(new DOMSource(document), new StreamResult("src/exam.xml")) ; } catch (Exception e) { e.printStackTrace(); } } }

    转载请注明原文地址: https://ju.6miu.com/read-950133.html

    最新回复(0)