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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory