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

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。