javaweb-day01-7(XML 解析-案例)

2024-09-07 16:08
文章标签 java xml web 解析 案例 day01

本文主要是介绍javaweb-day01-7(XML 解析-案例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

exam.xml

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



2、编程实现如下功能

 

3、实现学生信息的添加

 

4、实现学生信息的查询

 

5、实现学生的删除功能

 

 

添加数据:


查询数据:


 

开发顺序:先写javabean,再写Dao用到的工具类、Dao ,最后写界面层Main。

不同模块的程序,要放在不同的包里:

  •   实体javabean:放在domain包。
  •   Dao:放在dao包。dao操作xml文档必定会有重复代码:得到document、更新xml文档。将他们抽取到工具类XmlUtils里。
  •   工具类XmlUtils:放在utils工具包中。
  •   界面Main:放在main包。

 

 

Student.java

package cn.mengmei.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;}}



XMLUtils.java

package cn.mengmei.utils;import java.io.IOException;import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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;
import org.xml.sax.SAXException;public class XMLUtils {public static Document document() throws SAXException, IOException, ParserConfigurationException  {Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("src/exam.xml");return document;}public static void updateXML(Document document) throws TransformerConfigurationException, TransformerException, TransformerFactoryConfigurationError  {TransformerFactory.newInstance().newTransformer().transform(new DOMSource(document), new StreamResult("src/exam.xml"));}
}


 

StudentDao.java

package cn.mengmei.dao;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;import cn.mengmei.domain.Student;
import cn.mengmei.utils.XMLUtils;public class StudentDao {public void add(Student student) {try {Document document = XMLUtils.document();Element stuNode = document.createElement("student");stuNode.setAttribute("idcard", student.getIdcard());stuNode.setAttribute("examid", student.getExamid());Element nameNode = document.createElement("name");nameNode.setTextContent(student.getName());Element locNode = document.createElement("location");locNode.setTextContent(student.getLocation());Element graNode = document.createElement("grade");graNode.setTextContent(student.getGrade()+"");stuNode.appendChild(nameNode);stuNode.appendChild(locNode);stuNode.appendChild(graNode);document.getDocumentElement().appendChild(stuNode);XMLUtils.updateXML(document);} catch (Exception e) {throw new RuntimeException(e);}}public void delete(String name){try {Document document = XMLUtils.document();NodeList nameList = document.getElementsByTagName("name");for(int i=0;i<nameList.getLength();i++){Node nameNode = nameList.item(i);if(nameNode.getTextContent().equals(name)){Node stuNode = nameNode.getParentNode();stuNode.getParentNode().removeChild(stuNode);XMLUtils.updateXML(document);return;}}throw new RuntimeException("-------对不起,你要删除的学生信息不存在!------");  //异常也是一种返回值。} catch (Exception e) {throw new RuntimeException(e);}}public Student find(String examid){Document document = null;try {document = XMLUtils.document();NodeList stuList = document.getElementsByTagName("student");Student student = null;for(int i=0;i<stuList.getLength();i++){Element stuNode = (Element)stuList.item(i);if(Integer.parseInt(stuNode.getAttribute("examid")) == Integer.parseInt(examid)){student = new Student();student.setName(stuNode.getElementsByTagName("name").item(0).getTextContent());student.setIdcard(stuNode.getAttribute("idcard"));student.setExamid(stuNode.getAttribute("examid"));student.setLocation(stuNode.getElementsByTagName("location").item(0).getTextContent());student.setGrade(Double.parseDouble(stuNode.getElementsByTagName("grade").item(0).getTextContent()));}}return student;} catch (Exception e) {throw new RuntimeException(e);}}}



Main.java

package cn.mengmei.main;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;import cn.mengmei.dao.StudentDao;
import cn.mengmei.domain.Student;public class Main {public static void main(String[] args) {System.out.println("添加用户:(a)    删除用户:(b)    查询成绩:(c)");System.out.print("请输入操作类型:");BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String item = null;try {item = reader.readLine();} catch (IOException e1) {System.out.println("--------对不起,读取类型失败!--------");}String name = null;String idcard = null;String examid = null;String location = null;String grade = null;Student student = null;StudentDao dao = null;switch (item) {case "a":try {System.out.print("请输入学生姓名:");name = reader.readLine();System.out.print("请输入学生身份证号:");idcard = reader.readLine();System.out.print("请输入学生准考证号:");examid = reader.readLine();System.out.print("请输入学生所在地:");location = reader.readLine();System.out.print("请输入学生成绩:");grade = reader.readLine(); student = new Student();student.setName(name);student.setIdcard(idcard);student.setExamid(examid);student.setLocation(location);student.setGrade(Double.parseDouble(grade));dao = new StudentDao();dao.add(student);System.out.println("-----------添加数据成功-----------");} catch (Exception e) {System.out.println("-----------对不起,添加数据失败!-----------");}break;case "b":try {System.out.print("请输入要删除的学生姓名:");name = reader.readLine();dao = new StudentDao();dao.delete(name);System.out.println("------对已成功删除学生信息------");} catch (Exception e) {System.out.println(e.getMessage());}break;case "c":try {System.out.print("请输入要查询的学生准考证号:");examid = reader.readLine();dao = new StudentDao();student = dao.find(examid);if(student!=null){System.out.println("姓名:"+student.getName());System.out.println("身份证号:"+student.getIdcard());System.out.println("准考证号:"+student.getExamid());System.out.println("所在地:"+student.getLocation());System.out.println("成绩:"+student.getGrade());}else{System.out.println("--------对不起,没有查询到此学生!-------");}} catch (Exception e) {System.out.println("------对不起,查询失败!------");}break;default:System.out.println("-------非法类型-------");break;}}}



 

 

这篇关于javaweb-day01-7(XML 解析-案例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145525

相关文章

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

springboot将lib和jar分离的操作方法

《springboot将lib和jar分离的操作方法》本文介绍了如何通过优化pom.xml配置来减小SpringBoot项目的jar包大小,主要通过使用spring-boot-maven-plugin... 遇到一个问题,就是每次maven package或者maven install后target中的ja

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J