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>
作者才疏浅薄,以上内容仅供参考,如果问题,请多包含