JAXP Dom 案例 对xml文件进行增加 查找 删除

简介:

利用 JAXP 对 XML文件 的处理,把xml当做一个数据库来对待

 

Student对象定义类

复制代码
public class Student {

    private String idcard;//身份证号

    private String examid;//准考证号

    private String name;//姓名

    private String location;//籍贯

    private float grade;//成绩

   

    public Student(){}

   

   

    public Student(String idcard, String examid, String name, String location,

            float grade) {

        super();

        this.idcard = idcard;

        this.examid = examid;

        this.name = name;

        this.location = location;

        this.grade = 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 + "]";

    }

   

}
复制代码

 

 

StudentDao 接口类

//原则:抽象和实现分离

//根据功能要求

//接口中的每个方法:注释要写的清清楚楚,做到没有歧义

复制代码
 1 public interface StudentDao {
 2 
 3     /**
 4 
 5      * 添加学生信息到数据库
 6 
 7      * @param s 封装了要保存的信息的学生对象
 8 
 9      * @return 成功了返回true,否则false
10 
11      */
12 
13     boolean addStudent(Student s);
14 
15     /**
16 
17      * 根据准考证号查询学生的信息
18 
19      * @param examid 准考证号
20 
21      * @return 没有找到返回null
22 
23      */
24 
25     Student findByExamid(String examid);
26 
27     /**
28 
29      * 根据姓名删除学生信息
30 
31      * @param name 学生的姓名
32 
33      * @return 删除成功返回true。删除失败或学生不存在都返回false
34 
35      */
36 
37     boolean delStudentByName(String name);
38 
39 }
复制代码

 

 

StudentDaoimpl 实现类

复制代码
  1 public class StudentDaoImpl implements StudentDao {
  2 
  3  
  4 
  5      public boolean addStudent(Student s) {
  6 
  7          boolean result = false;
  8 
  9          try {
 10 
 11               //得到Document对象
 12 
 13               Document doc = JaxpUtil.getDocument();//异常怎么办?抛:调用者得有能力处理。处理
 14 
 15               //创建<student>:设置属性
 16 
 17               Element studentE = doc.createElement("student");//<student></student>
 18 
 19               studentE.setAttribute("idcard", s.getIdcard());
 20 
 21               studentE.setAttribute("examid", s.getExamid());//<student idcard="370101" examid="438">
 22 
 23               //依次创建<name><location><grade>并设置主体内容
 24 
 25               Element nameE = doc.createElement("name");//<name></name>
 26 
 27               nameE.setTextContent(s.getName());// <name>郭美美</name>
 28 
 29              
 30 
 31               Element locationE = doc.createElement("location");
 32 
 33               locationE.setTextContent(s.getLocation());
 34 
 35              
 36 
 37               Element gradeE = doc.createElement("grade");
 38 
 39               gradeE.setTextContent(s.getGrade()+"");
 40 
 41               //建立与student元素的父子关系
 42 
 43               studentE.appendChild(nameE);
 44 
 45               studentE.appendChild(locationE);
 46 
 47               studentE.appendChild(gradeE);
 48 
 49               //把student挂接到根元素上
 50 
 51               Node rootNode = doc.getElementsByTagName("exam").item(0);
 52 
 53               rootNode.appendChild(studentE);
 54 
 55               //写回xml文档中
 56 
 57               JaxpUtil.write2xml(doc);
 58 
 59               result = true;
 60 
 61          } catch (Exception e) {
 62 
 63               throw new RuntimeException(e);//编译时异常--》运行时异常:异常转义;异常链
 64 
 65          }
 66 
 67          return result;
 68 
 69      }
 70 
 71  
 72 
 73      public Student findByExamid(String examid) {
 74 
 75          Student s = null;
 76 
 77          try {
 78 
 79               //得到Document对象
 80 
 81               Document doc = JaxpUtil.getDocument();
 82 
 83               //得到所有的<student>元素
 84 
 85               NodeList nl  = doc.getElementsByTagName("student");
 86 
 87               //遍历:判断属性的值和参数的值是否相等
 88 
 89               for(int i=0;i<nl.getLength();i++){
 90 
 91                    //相等:读取属性和子元素的文本,封装到Student对象中
 92 
 93                    Node node = nl.item(i);
 94 
 95                    if(node.getNodeType()==Node.ELEMENT_NODE){
 96 
 97                        Element e = (Element)node;
 98 
 99                        if(e.getAttribute("examid").equals(examid)){
100 
101                             s = new Student();
102 
103                             s.setIdcard(e.getAttribute("idcard"));
104 
105                             s.setExamid(examid);
106 
107                             s.setName(e.getElementsByTagName("name").item(0).getTextContent());
108 
109                             s.setLocation(e.getElementsByTagName("location").item(0).getTextContent());
110 
111                             s.setGrade(Float.parseFloat(e.getElementsByTagName("grade").item(0).getTextContent()));
112 
113                             break;
114 
115                        }
116 
117                    }
118 
119               }
120 
121               //返回数据
122 
123          } catch (Exception e) {
124 
125               throw new RuntimeException(e);//编译时异常--》运行时异常:异常转义;异常链
126 
127          }
128 
129          return s;
130 
131      }
132 
133  
134 
135      public boolean delStudentByName(String name) {
136 
137          boolean result = false;
138 
139          try {
140 
141               //得到Document对象
142 
143               Document doc = JaxpUtil.getDocument();
144 
145               //得到所有的name元素
146 
147               NodeList nl = doc.getElementsByTagName("name");
148 
149               //遍历:判断元素的文本和参数是否相等
150 
151               for(int i=0;i<nl.getLength();i++){
152 
153                    Node node = nl.item(i);
154 
155                    if(node.getTextContent().equals(name)){
156 
157                        //如果是:爷爷干掉爸爸
158 
159                        node.getParentNode().getParentNode().removeChild(node.getParentNode());
160 
161                        //写回xml文档
162 
163                        JaxpUtil.write2xml(doc);
164 
165                        //设置标记为true
166 
167                        result = true;
168 
169                    }
170 
171               }
172 
173          } catch (Exception e) {
174 
175               throw new RuntimeException(e);//编译时异常--》运行时异常:异常转义;异常链
176 
177          }
178 
179          return result;
180 
181      }
182 
183  
184 
185 }
复制代码

 

 

JavaUtil

//工具类

//异常可以处理:不给调用者添麻烦

//可以抛:谁用谁处理

复制代码
 1 public class JaxpUtil {
 2 
 3     public static Document getDocument() throws ParserConfigurationException, SAXException, IOException{
 4 
 5         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 6 
 7         DocumentBuilder builder = dbf.newDocumentBuilder();//异常怎么办?哲学问题
 8 
 9         Document document = builder.parse("src/exam.xml");
10 
11         return document;
12 
13     }
14 
15     public static void write2xml(Document document) throws TransformerException{
16 
17         TransformerFactory tf = TransformerFactory.newInstance();
18 
19         Transformer ts = tf.newTransformer();
20 
21         ts.transform(new DOMSource(document), new StreamResult("src/exam.xml"));
22 
23     }
24 
25 }
复制代码

 

 

StudentDaoImplTest 测试类

复制代码
 1 public class StudentDaoImplTest {
 2 
 3     public static void main(String[] args) {
 4 
 5        StudentDao dao = new StudentDaoImpl();
 6 
 7  
 8 
 9 //     Student s = new Student();
10 
11 //     s.setExamid("999");
12 
13 //     s.setIdcard("1101");
14 
15 //     s.setName("牛骞");
16 
17 //     s.setLocation("河南");
18 
19 //     s.setGrade(100);
20 
21 //     dao.addStudent(s);
22 
23       
24 
25        Student s = dao.findByExamid("999");
26 
27        System.out.println(s);
28 
29       
30 
31 //     boolean b = dao.delStudentByName("牛骞");
32 
33 //     System.out.println(b);
34 
35     }
复制代码

 

目录
相关文章
|
1月前
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
55 1
|
3月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
158 1
|
3月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
6天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
48 8
|
10天前
|
JavaScript 前端开发
|
1月前
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
24 3
|
2月前
|
JavaScript 前端开发
前端基础(十)_Dom自定义属性(带案例)
本文介绍了DOM自定义属性的概念和使用方法,并通过案例展示了如何使用自定义属性来控制多个列表项点击变色的独立状态。
43 0
前端基础(十)_Dom自定义属性(带案例)
|
1月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
86 0
|
1月前
|
XML 存储 Web App开发
查看 XML 文件
查看 XML 文件
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1