用DOM方式解析XML(用JAXP工具)--小案例---第一天
来源:互联网 发布:旧版本的淘宝下载 编辑:程序博客网 时间:2024/05/25 19:56
以如下格式的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>
编程实现如下功能
添加用户的界面如下:
删除用户的界面如下:
查询用户的界面如下:
用JAXP DOM方式完成:
把功能分层设计,好处多多,分层图分析如下:
分层图功能说明:
增:用户通过界面输入学生数据,程序接收后通过JavaBean的设置方法封装成JavaBean对象,并传给DAO,DAO通过JavaBean的获取方法获取传过来的JavaBean学生信息,经过处理后写入XML;
查:用户通过界面输入要查询的学生姓名,并传给DAO,DAO通过XML获取符合要求的学生信息,并通过JavaBean的设置方法封装成JavaBean,再传给Main,然后Main通过JavaBean的获取方法取出学生信息。
删:用户通过界面输入要删除的学生的准考证号,并传给DAO,DAO删除XML中符合要求的学生
根据分层设计图创建如下包和类:
1、com.itheima.domain包: Student.java (JavaBean)
2、com.itheima.util包:JaxpUtil.java (getDocument()、write2xml()方法,用于获取DOM树对象和把DOM树对象写入XML文件)
3、com.itheima.dao包:StudentDaoImpl.java (学生DAO实现类,方法:addStudent() ,queryStudent(),deleteStudent(),即增、查、删三个方法)
4、com.itheima.test包:StudentDaoImplTest.java(用于临时测试StudentDaoImpl.java里面的增、查、删方法)
5、com.itheima.view包:Main.java(用于编写用户界面,接收用户信息)
具体代码如下:
1、com.itheima.domain包: Student.java
package com.itheima.domain;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;}@Overridepublic String toString() {return "Student [idcard=" + idcard + ", examid=" + examid + ", name="+ name + ", location=" + location + ", grade=" + grade + "]";}}
2、com.itheima.util包:JaxpUtil.java
package com.itheima.util;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 JaxpUtil {public static Document getDocument() throws Exception{DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();Document document = db.parse("src/exam.xml");return document;}public static void write2xml(Document document) throws Exception {Transformer t = TransformerFactory.newInstance().newTransformer();t.transform(new DOMSource(document), new StreamResult("src/exam.xml"));}}
3、com.itheima.dao包:StudentDaoImpl.java
package com.itheima.dao;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import com.itheima.domain.Student;import com.itheima.util.JaxpUtil;public class StudentDaoImpl {public static boolean addStudent(Student student){boolean result = false;try{//1、获取DOM树Document document = JaxpUtil.getDocument();//2、创建学生元素,并添加属性或主体内容Element studentE = document.createElement("student");studentE.setAttribute("idcard", student.getIdcard());studentE.setAttribute("examid", student.getExamid());Element nameE = document.createElement("name");nameE.setTextContent(student.getName());Element locationE = document.createElement("location");locationE.setTextContent(student.getLocation());Element gradeE = document.createElement("grade");gradeE.setTextContent(student.getGrade()+"");//3、把学生元素添加到DOMNode examN = document.getElementsByTagName("exam").item(0);examN.appendChild(studentE);studentE.appendChild(nameE);studentE.appendChild(locationE);studentE.appendChild(gradeE);//4、把DOM树写回XML文档中JaxpUtil.write2xml(document);result = true;}catch(Exception e){throw new RuntimeException(e);}return result;}public static Student queryStudent(String examid){Student student = null;//1、获得DOM树Document document;try {document = JaxpUtil.getDocument();} catch (Exception e) {throw new RuntimeException(e);}//2、获得所有student节点,遍历这些节点的examid属性,//以便找到要查找的examid,并获得这个属性的studetn节点NodeList studentNodeList = document.getElementsByTagName("student"); Element studentE = null;for(int i=0;i<studentNodeList.getLength();i++){studentE = (Element) studentNodeList.item(i);if(studentE.getAttribute("examid").equals(examid))break;//此时的studentE就是要查找的目标}//3、把打到的studentE的所有属性值/节点的主体内容封装成StudentBean并返回student = new Student();student.setExamid(studentE.getAttribute(examid));student.setIdcard(studentE.getAttribute("idcard"));student.setName(studentE.getElementsByTagName("name").item(0).getTextContent());student.setLocation(studentE.getElementsByTagName("location").item(0).getTextContent());student.setGrade(Float.parseFloat(studentE.getElementsByTagName("grade").item(0).getTextContent()));return student;}public static boolean deleteStudent(String name){boolean result = false;//1、获得DOM树Document document;try {document = JaxpUtil.getDocument();} catch (Exception e) {throw new RuntimeException(e);}//2、获得所有的name列表,并遍历找到需要的name节点并删除name的父节点(student)NodeList nameNodeList = document.getElementsByTagName("name");for(int i=0;i<nameNodeList.getLength();i++){if(nameNodeList.item(i).getTextContent().equals(name)){nameNodeList.item(i).getParentNode().getParentNode().removeChild(nameNodeList.item(i).getParentNode());result = true;break;}}//3、把删除节点后的DOM树写回XML文档try {JaxpUtil.write2xml(document);} catch (Exception e) {throw new RuntimeException(e);}return result;}}
4、com.itheima.test包:StudentDaoImplTest.java
package com.itheima.test;import com.itheima.dao.StudentDaoImpl;import com.itheima.domain.Student;public class StudentDaoImplTest {public static void main(String[] args) {/*Student student = new Student();student.setIdcard("3838438");student.setExamid("520");student.setName("阿Q");student.setLocation("地球");student.setGrade(99.5f);StudentDaoImpl.addStudent(student);*//测试添加功能Student student = StudentDaoImpl.queryStudent("444");//测试查询功能if(!(student == null))System.out.println(student.getName());elseSystem.out.println("没有这个人!");StudentDaoImpl.deleteStudent("阿Q");//测试删除功能}}
5、com.itheima.view包:Main.java
package com.itheima.view;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import com.itheima.dao.StudentDaoImpl;import com.itheima.domain.Student;public class Main {public static void main(String[] args) {System.out.println("a)添加用户:\tb)查询用户:" +"\tc)删除用户:\n请输入操作类型:");BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));try {String line = reader.readLine();if(line.equals("a")){System.out.println("请输入学生姓名:");String name = reader.readLine();System.out.println("请输入学生准考证号:");String examid = reader.readLine();System.out.println("请输入学生身份证号:");String idcard = reader.readLine();System.out.println("请输入学生所在地:");String location = reader.readLine();System.out.println("请输入学生成绩:");String grade = reader.readLine();//添加学生JavaBean对象Student student = new Student(); student.setName(name);student.setExamid(examid);student.setIdcard(idcard);student.setLocation(location);student.setGrade(Float.parseFloat(grade));//将学生JavaBean对象信息添加到XML文件中if(StudentDaoImpl.addStudent(student))System.out.println("恭喜,添加成功!");elseSystem.out.println("对不起,服务器忙!");}else if(line.equals("b")){System.out.println("请输入查询的学生准考证号:");String examid = reader.readLine();Student student = StudentDaoImpl.queryStudent(examid);if(student != null)System.out.println("您查询学生的信息为:\n" + student);elseSystem.out.println("对不起,服务器忙!");}else if(line.endsWith("c")){System.out.println("请输入要删除的学生姓名:");String name = reader.readLine();if(StudentDaoImpl.deleteStudent(name))System.out.println("已成功删除学生信息!");elseSystem.out.println("您输入的学生不存在!");}elseSystem.out.println("输入错误,请重新输入");} catch (IOException e) {System.out.println("不好意思,服务器忙!");}}}
- 用DOM方式解析XML(用JAXP工具)--小案例---第一天
- 用DOM方式解析XML(使用JAXP工具)--第一天
- xml解析-jaxp-dom方式
- 用“XML解析开发包Jaxp”对XML进行Dom方式解析-readXml操作
- 【JAVA学习小结】-【用JAXP解析包解析XML方法】-【第一篇DOM解析】
- 【JAXP】Dom方式解析XML文件
- 用“XML解析开发包Jaxp”对XML文件进行Dom方式的CRUD操作
- jaxp下用DOM进行xml文档解析
- Java用dom和sax解析xml代码(Jaxp)
- 使用JAXP的DOM方式解析XML文档(能力工场)
- 利用JAXP的DOM方式对xml文档进行解析
- 利用JAXP开发包进行DOM方式解析XML文档
- jaxp解析器用dom方式操作xml文档的总结
- jaxp解析器用dom方式操作xml文档的总结
- 使用JAXP Dom解析xml
- XML - JAXP技术 - DOM解析
- jaxp利用DOM解析XML
- 【XML】DOM—JAXP 解析
- 索尼Walkman NWZ-S764 8G MP3 (带蓝牙耳机、FM)$99
- 网络爬虫内容抓取
- 微软献给寂寞的程序员们的YY大片
- 求二叉树中节点的最大距离
- 快速求质数(C语言描述)
- 用DOM方式解析XML(用JAXP工具)--小案例---第一天
- 网络IO模型
- EL表达式(详解)
- 学习中的悖论
- ExpandableListView实例(三)_实现QQ中"未分组"效果和"未分组"不可编辑删除功能
- 【Notes】How to relaunch/reconfigure Notes Client in case Notes Client crashed
- 恐惧
- 关于历史电影电视剧的吐槽
- 如何通过开源软件来学习嵌入式系统?