使用DOM4J和Xpath的学生管理系统

DOM4J和Xpath的使用需要引包,分别为 dom4j-1.6.1.jar和jaxen-1.1-beta-7.jar

以下只截取代码块,具体内容和注意点 请访问:有道云笔记https://note.youdao.com/s/ZCHrTsVo

这是主类

package Student;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Scanner;

public class Manager {
    public static void main(String[] args) throws Exception {
//      创建数据流
        InputStream is = Manager.class.getClassLoader().getResourceAsStream("Student.xml");
//      创建解析对象
        SAXReader sax=new SAXReader();
//      将数据流转化为整个文档
        Document doc = sax.read(is);
//      获取根元素
        Element root = doc.getRootElement();
//      实例化接收方法
        Scanner sc=new Scanner(System.in);
//        实例化主类,用于调用方法
        Manager m=new Manager();
//        调用主页面方法
        m.Maininterface(sc,m,root,doc);


下面是各个调用方法


    public void Maininterface(Scanner sc,Manager m,Element root,Document doc) throws Exception{
        System.out.println("------欢迎使用学生管理系统-------");
        System.out.println("1.添加学生信息");
        System.out.println("2.删除学生信息");
        System.out.println("3.修改学生信息");
        System.out.println("4.查找全部学生信息");
        System.out.println("5.退出");
        System.out.println();
        System.out.println("请输入指令对应操作");
        int choose = sc.nextInt();
        switch (choose){
            case 1:
                System.out.println("进入添加学生信息界面");
                m.add(root,sc,m,doc);
                System.out.println("添加成功,按任意键返回主界面");
                sc.next();
                m.Maininterface(sc,m,root,doc);
                break;
            case 2:
                System.out.println("进入删除学生信息界面");
                m.delete(sc,root,doc,m);
                System.out.println("删除成功,按任意键返回主界面");
                sc.next();
                m.Maininterface(sc,m,root,doc);
                break;
            case 3:
                System.out.println("进入修改学生信息页面");
                m.update(sc,root,m,doc);
                System.out.println("修改成功,按任意键返回主界面");
                sc.next();
                m.Maininterface(sc,m,root,doc);
                break;
            case 4:
                System.out.println("进入查看全部学生信息");
                m.inquire(root);
                System.out.println("查看成功,按任意键返回主界面");
                sc.next();
                m.Maininterface(sc,m,root,doc);
                break;
            case 5:
                System.out.println("谢谢使用");
                System.exit(0);
                break;
            default:
                System.out.println("您输入的信息有误,请重新输入");
                m.Maininterface(sc,m,root,doc);

        }
    }
    public void add(Element root,Scanner sc,Manager m,Document doc) throws Exception{
//        创建新的子节点
        Element student = root.addElement("student");
//        创建学生id
        Element id = student.addElement("id");
//        输入学生id
//        System.out.println("请输入学生id");
//        String sid=sc.next();
//        List<Element> list = root.selectNodes("student/id");

//        输入学生id,并且判断id是否重复,如果重复,请求重新输入
        String sid=m.cycle(sc,root,m);

        id.setText(sid);
//        输入学生姓名
        Element name = student.addElement("name");
        System.out.println("请输入学生姓名");
        String sname=sc.next();
        name.setText(sname);
//        输入学生年龄
        Element age = student.addElement("age");
        System.out.println("请输入学生年龄");
        String sage = sc.next();
        age.setText(sage);
//        创建完成只是在内存中模拟出来, 还需要写回到xml文件中
        FileOutputStream out=new FileOutputStream(new File("D:\\桌面文件\\新建文件夹\\Library\\TEXT\\src\\Student.xml"));
        OutputFormat format=new OutputFormat("\t",true,"UTF-8");
        XMLWriter xw=new XMLWriter(out, format);
//         写入到XML文件
        xw.write(doc);
        System.out.println("写入成功");
        xw.close();
    }
    public void delete(Scanner sc,Element root,Document doc,Manager m) throws Exception {
        System.out.println("请输入需要删除的学生id");
        String sid = sc.next();
        List<Element> list = root.selectNodes("student/id");
        int q=1;
        for (Element s : list) {
            if (sid.equals(s.getData())) {
                Element a = s.getParent();
                Element b=s.getParent().getParent();
                b.remove(a);
                q=2;
            }
        }
        if(q==1){
                System.out.println("您输入的学号有误,返回主界面");
                m.Maininterface(sc,m,root,doc);
        }

//        创建完成只是在内存中模拟出来, 还需要写回到xml文件中
        FileOutputStream out=new FileOutputStream(new File("D:\\桌面文件\\新建文件夹\\Library\\TEXT\\src\\Student.xml"));
        OutputFormat format=new OutputFormat("\t",true,"UTF-8");
        XMLWriter xw=new XMLWriter(out, format);
//         写入到XML文件
        xw.write(doc);
        System.out.println("写入成功");
        xw.close();
    }
    public void update(Scanner sc,Element root,Manager m,Document doc) throws Exception {
        System.out.println("请输入需要修改的学生id");
        String sid = sc.next();
        List<Element> list=root.selectNodes("student/id");
        int a=1;
        for(Element s:list){
            if(sid.equals(s.getData())){
                Element p1=s.getParent();
//               修改名字
                System.out.println("当前的学生姓名:"+p1.element("name").getData());
                System.out.println("请输入需要修改的学生姓名信息");
                String sname=sc.next();
                Element name=p1.element("name");
                name.setText(sname);
//                修改年龄
                System.out.println("当前的学生年龄:"+p1.element("age").getData());
                System.out.println("请输入需要修改的学生年龄信息");
                String sage=sc.next();
                Element age=p1.element("age");
                age.setText(sage);
                a=2;
            }

        }
        if(a==1){
            System.out.println("您输入的学号有误,返回主界面");
            m.Maininterface(sc,m,root,doc);}
//        创建完成只是在内存中模拟出来, 还需要写回到xml文件中
        FileOutputStream out=new FileOutputStream(new File("D:\\桌面文件\\新建文件夹\\Library\\TEXT\\src\\Student.xml"));
        OutputFormat format=new OutputFormat("\t",true,"UTF-8");
        XMLWriter xw=new XMLWriter(out, format);
//         写入到XML文件
        xw.write(doc);
        System.out.println("写入成功");
        xw.close();

    }
    public void inquire(Element root) {
//        第一种方式
//        List<Element> list = root.selectNodes("//id|//name|//age");
//        list.forEach(s -> System.out.println(s.getName()+":"+s.getData()));
//        第二种方式
        List<Element> list = root.elements();
        for (Element e1 : list) {
            List<Element> list1 = e1.elements();
            for (Element e2 : list1) {
                System.out.println(e2.getName() + ":" + e2.getData());
            }
        }
    }
    public String cycle(Scanner sc, Element root, Manager m){
        System.out.println("请输入学生id");
         String sid=sc.next();
        List<Element> list = root.selectNodes("student/id");
        for( Element s:list){
            if(sid.equals(s.getData())){
                System.out.println("id重复,请重新输入");
                m.cycle(sc,root,m);
            }
        }
        return sid;
    }
}

XML文件:

<students>
   
   <student>
      
      <id>1</id>
      
      <name>王刚</name>
      
      <age>27</age>
   
   </student>
   
   <student>
      
      <id>2</id>
      
      <name>于谦</name>
      
      <age>22</age>
   
   </student>
   
   <student>
      
      <id>3</id>
      
      <name>郭德纲</name>
      
      <age>25</age>
   
   </student>

</students>

 作者才疏浅薄,以上内容仅供参考,如果问题,请多包含

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值