1.xml文件:
<?xml version="1.0" encoding="utf-8"?><students> <student id="2"> <name>ttt</name> <age>44</age> </student> <student id="3"> <name>linda2</name> <age>22</age> </student> <student id="4"> <name>linda3</name> <age>23</age> </student> <student id="5"> <name>jack</name> <age>2</age> </student> <student id="1"> <name>yyh1</name> <age>22</age> </student> </students>
2.java代码
import java.io.file;
import java.io.ioexception;
import java.util.scanner;
import javax.xml.parsers.parserconfigurationexception;
import javax.xml.transform.transformer;
import javax.xml.transform.transformerconfigurationexception;
import javax.xml.transform.transformerexception;
import javax.xml.transform.transformerfactory;
import javax.xml.transform.transformerfactoryconfigurationerror;
import javax.xml.transform.dom.domsource;
import javax.xml.transform.stream.streamresult;
import org.w3c.dom.document;
import org.w3c.dom.element;
import org.w3c.dom.nodelist;
import org.w3c.dom.text;
import org.xml.sax.saxexception;
//在学生管理系统里面,学生的学号是唯一的,姓名有可能重复
public class studentmanager {
public static void main(string[] args) {
try {
document doc = domutils.getdoc(new file("xml文件的相对路径"));
scanner input = new scanner(system.in);
system.out.println("欢迎来到学生管理系统\n\n\n请输入你要进行什么操作是:\n1.添加学生信息\n2.删除学生信息\n3.修改学生信息\n(请输入前边的序号)");
int num = input.nextint();
if(num == 1) {
addstudent(doc);
}else if(num == 2) {
delstudent(doc);
}else if(num == 3) {
updstudent(doc);
}
} catch (saxexception e) {
e.printstacktrace();
} catch (ioexception e) {
e.printstacktrace();
} catch (parserconfigurationexception e) {
e.printstacktrace();
}
}
//修改学生信息
private static void updstudent(document doc) {
element updstudent = null;
scanner input = new scanner(system.in);
system.out.println("请输入你要修改的学生的学号:");
string studentid = input.nextline();
system.out.println("请输入新学生的姓名:");
string newname = input.nextline();
system.out.println("请输入新学生的年龄:");
string newage = input.nextline();
//将每一个学生的列出来,for循环判断你要修改信息的学生是哪一个
nodelist list = doc.getelementsbytagname("student");
for(int i = 0; i <list.getlength(); i++) {
if(studentid.equals(list.item(i).getattributes().getnameditem("id").getnodevalue())){
updstudent = (element) doc.getelementsbytagname("student").item(i).getfirstchild().getparentnode();
//对学生的name属性进行赋新值
updstudent.getelementsbytagname("name").item(i).getfirstchild().setnodevalue(newname);
//对学生的age 属性赋新值
updstudent.getelementsbytagname("age").item(i).getfirstchild().setnodevalue(newage);
}else{
break;
}
}
//找出根元素,将修改后的元素持久化到文件
element root = doc.getdocumentelement();
transform(root);
system.out.println(updstudent);
}
//删除学生信息
private static void delstudent(document doc) {
scanner input = new scanner(system.in);
//输入你要删除的学生的 学号
system.out.println("请输入要删除学生的学号:");
string studentid = input.nextline();
element root = doc.getdocumentelement();
//将学生列成一个表,进行遍历,找对应学号的学生进行删除
nodelist list = doc.getelementsbytagname("student");
for(int i = 0; i < list.getlength(); i++) {
if((studentid).equals(list.item(i).getattributes().getnameditem("id").getnodevalue())){
element delstudent = (element) doc.getelementsbytagname("student").item(i).getfirstchild().getparentnode();
root.removechild(delstudent);
break;
}else {
system.out.println("没有该学生");
break;
}
}
//持久化到文件
transform(root);
}
//添加学生信息
private static void addstudent(document doc) {
// system.out.println(doc.getelementsbytagname("student").item(1).getattributes().getnameditem("id").getnodevalue());
element root = doc.getdocumentelement();
//从控制台输入
scanner input = new scanner(system.in);
system.out.println("请输入学生的序号:id = ");
//将学生放到一个列表里面,看我们要添加的学生的学号里面是否已经有了,如果有,需要将新加入的学生的学号改一下
nodelist list = doc.getelementsbytagname("student");
string studentid = input.nextline();
for(int i = 0; i < list.getlength(); i++) {
if(studentid.equals(list.item(i).getattributes().getnameditem("id").getnodevalue())){
system.out.println("该序号学生表里面已经存在,请重新输入一个新的序号:");
studentid = input.nextline();
}else {
break;
}
}
system.out.println("请输入要添加学生的姓名:name = ");
string name_value = input.nextline();
system.out.println("请输入要添加学生的年龄:age = ");
string age_value = input.nextline();
//创建节点
element student = doc.createelement("student");
element name = doc.createelement("name");
element age = doc.createelement("age");
text namtext = doc.createtextnode(name_value);
text agetext = doc.createtextnode(age_value);
//关联节点之间的关系
root.appendchild(student);
student.appendchild(name);
student.appendchild(age);
student.setattribute("id", studentid);
name.appendchild(namtext);
age.appendchild(agetext);
//持久化到文件
transform(root);
}
//持久化到文件的方法
private static void transform(element root)
throws transformerfactoryconfigurationerror {
transformerfactory factory = transformerfactory.newinstance();
try {
transformer tf = factory.newtransformer();
tf.transform(new domsource(root), new streamresult(new file("src/com/briup/dom/student.xml")));
} catch (transformerconfigurationexception e) {
e.printstacktrace();
} catch (transformerexception e) {
e.printstacktrace();
}
}
}
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;
}
}
以上这篇将xml文件作为一个小的数据库,进行学生的增删改查的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
社会混混