• 将xml文件作为一个小的数据库,进行学生的增删改查


    1.xml文件:

     1 <?xml version="1.0" encoding="UTF-8"?><Students>
     2   <student id="2">
     3     <name>ttt</name>
     4     <age>44</age>
     5   </student>
     6   <student id="3">
     7     <name>linda2</name>
     8     <age>22</age>
     9   </student>
    10   <student id="4">
    11     <name>linda3</name>
    12     <age>23</age>
    13   </student>
    14   <student id="5">
    15     <name>jack</name>
    16     <age>2</age>
    17   </student>
    18   <student id="1">
    19       <name>yyh1</name>
    20       <age>22</age>
    21   </student>
    22 </Students>

    2.Java代码

      1 import java.io.File;
      2 import java.io.IOException;
      3 import java.util.Scanner;
      4 
      5 import javax.xml.parsers.ParserConfigurationException;
      6 import javax.xml.transform.Transformer;
      7 import javax.xml.transform.TransformerConfigurationException;
      8 import javax.xml.transform.TransformerException;
      9 import javax.xml.transform.TransformerFactory;
     10 import javax.xml.transform.TransformerFactoryConfigurationError;
     11 import javax.xml.transform.dom.DOMSource;
     12 import javax.xml.transform.stream.StreamResult;
     13 
     14 import org.w3c.dom.Document;
     15 import org.w3c.dom.Element;
     16 import org.w3c.dom.NodeList;
     17 import org.w3c.dom.Text;
     18 import org.xml.sax.SAXException;
     19 
     20 //在学生管理系统里面,学生的学号是唯一的,姓名有可能重复
     21 public class StudentManager {
     22     public static void main(String[] args) {
     23         try {
     24             Document doc = Domutils.getDoc(new File("xml文件的相对路径"));
     25             Scanner input = new Scanner(System.in);
     26             System.out.println("欢迎来到学生管理系统
    
    
    请输入你要进行什么操作是:
    1.添加学生信息
    2.删除学生信息
    3.修改学生信息
    (请输入前边的序号)");
     27             int num = input.nextInt();
     28             if(num == 1) {
     29                 addStudent(doc);
     30             }else if(num == 2) {
     31                 delStudent(doc);
     32             }else if(num == 3) {
     33                 updStudent(doc);
     34             }
     35         } catch (SAXException e) {
     36             e.printStackTrace();
     37         } catch (IOException e) {
     38             e.printStackTrace();
     39         } catch (ParserConfigurationException e) {
     40             e.printStackTrace();
     41         }
     42     }
     43     //修改学生信息
     44     private static void updStudent(Document doc) {
     45         Element updStudent = null;
     46         Scanner input = new Scanner(System.in);
     47         System.out.println("请输入你要修改的学生的学号:");
     48         String studentid = input.nextLine();
     49         System.out.println("请输入新学生的姓名:");
     50         String newName = input.nextLine();
     51         System.out.println("请输入新学生的年龄:");
     52         String newAge = input.nextLine();
     53         
     54         //将每一个学生的列出来,for循环判断你要修改信息的学生是哪一个
     55         NodeList list = doc.getElementsByTagName("student");
     56         for(int i = 0; i <list.getLength(); i++) {
     57             if(studentid.equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){
     58                 updStudent = (Element) doc.getElementsByTagName("student").item(i).getFirstChild().getParentNode();
     59                 //对学生的name属性进行赋新值
     60                 updStudent.getElementsByTagName("name").item(i).getFirstChild().setNodeValue(newName);
     61                 //对学生的age 属性赋新值
     62                 updStudent.getElementsByTagName("age").item(i).getFirstChild().setNodeValue(newAge);
     63                 
     64             }else{
     65                 break;
     66             }
     67         }
     68         //找出根元素,将修改后的元素持久化到文件
     69         Element root = doc.getDocumentElement();
     70         transform(root);
     71         System.out.println(updStudent);
     72     }
     73     //删除学生信息
     74     private static void delStudent(Document doc) {
     75         Scanner input = new Scanner(System.in);
     76         //输入你要删除的学生的 学号
     77         System.out.println("请输入要删除学生的学号:");
     78         String studentid = input.nextLine();
     79         Element root = doc.getDocumentElement();
     80         
     81         //将学生列成一个表,进行遍历,找对应学号的学生进行删除
     82         NodeList list = doc.getElementsByTagName("student");
     83         for(int i = 0; i < list.getLength(); i++) {
     84         if((studentid).equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){
     85             Element delStudent = (Element) doc.getElementsByTagName("student").item(i).getFirstChild().getParentNode(); 
     87                 root.removeChild(delStudent);
     88                 break;
     89             }else {
     90                 System.out.println("没有该学生");
     91                 break;
     92             }
     93         }
     94         //持久化到文件
     95         transform(root);
     96     }
     97     
     98     //添加学生信息
     99     private static void addStudent(Document doc) {
    100 //        System.out.println(doc.getElementsByTagName("student").item(1).getAttributes().getNamedItem("id").getNodeValue());
    101         Element root = doc.getDocumentElement();
    102         //从控制台输入
    103         Scanner input = new Scanner(System.in);
    104         System.out.println("请输入学生的序号:id = ");
    105          
    106         //将学生放到一个列表里面,看我们要添加的学生的学号里面是否已经有了,如果有,需要将新加入的学生的学号改一下
    107         NodeList list = doc.getElementsByTagName("student");
    108         String studentid = input.nextLine();
    109         for(int i = 0; i < list.getLength(); i++) {
    110             if(studentid.equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){
    111                 System.out.println("该序号学生表里面已经存在,请重新输入一个新的序号:");
    112                  studentid = input.nextLine();
    113             }else {
    114                 break;
    115             }
    116         }
    117         
    118         System.out.println("请输入要添加学生的姓名:name = ");
    119         String name_value = input.nextLine();
    120         System.out.println("请输入要添加学生的年龄:age = ");
    121         String age_value = input.nextLine();
    122         
    123         //创建节点
    124         Element student = doc.createElement("student");
    125         Element name = doc.createElement("name");
    126         Element age = doc.createElement("age");
    127         Text namText = doc.createTextNode(name_value);
    128         Text ageText = doc.createTextNode(age_value);
    129         //关联节点之间的关系
    130         root.appendChild(student);
    131         student.appendChild(name);
    132         student.appendChild(age);
    133         student.setAttribute("id", studentid);
    134         name.appendChild(namText);
    135         age.appendChild(ageText);
    136         //持久化到文件
    137         transform(root);
    138         
    139     }
    140     //持久化到文件的方法
    141     private static void transform(Element root)
    142             throws TransformerFactoryConfigurationError {
    143         TransformerFactory factory = TransformerFactory.newInstance();
    144         try {
    145             Transformer tf = factory.newTransformer();
    146             tf.transform(new DOMSource(root), new StreamResult(new File("src/com/briup/dom/student.xml")));
    147         } catch (TransformerConfigurationException e) {
    148             e.printStackTrace();
    149         } catch (TransformerException e) {
    150             e.printStackTrace();
    151         }
    152     }
    153 }

    2.Dom解析文件(将获取解析文件的部分封装起来)

    import java.io.File;
    import java.io.IOException;
    import java.nio.file.attribute.AclEntry.Builder;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    
    import org.w3c.dom.Document;
    import org.xml.sax.SAXException;
    
    public class Domutils {
        public static Document getDoc(File file) throws SAXException, IOException, ParserConfigurationException {
          //获取工厂模式 DocumentBuilderFactory factory
    = DocumentBuilderFactory.newInstance();
            //获取builder对象 DocumentBuilder builder
    = factory.newDocumentBuilder();
            //将要解析文件加载成一个树状文件,开始解析 Document document
    = builder.parse(file); return document; } }
  • 相关阅读:
    PHP计算近1年的所有月份
    mysql的索引和锁
    深度解析 https 协议
    linux 常用命令大全
    为什么Python3.6字典变得有序了?
    oddo
    RESTful接口开发规范
    python中的 __inti__ 和 __new__ 方法的区别
    十大经典算法 Python实现
    MongoDB journal 与 oplog,究竟谁先写入?--转载
  • 原文地址:https://www.cnblogs.com/yyh1/p/4827741.html
Copyright © 2020-2023  润新知