将xml文件作为一个小的数据库,进行学生的增删改查的简单实例
1.xml文件:
<?xmlversion="1.0"encoding="UTF-8"?><Students> <studentid="2"> <name>ttt</name> <age>44</age> </student> <studentid="3"> <name>linda2</name> <age>22</age> </student> <studentid="4"> <name>linda3</name> <age>23</age> </student> <studentid="5"> <name>jack</name> <age>2</age> </student> <studentid="1"> <name>yyh1</name> <age>22</age> </student> </Students>
2.Java代码
importjava.io.File;
importjava.io.IOException;
importjava.util.Scanner;
importjavax.xml.parsers.ParserConfigurationException;
importjavax.xml.transform.Transformer;
importjavax.xml.transform.TransformerConfigurationException;
importjavax.xml.transform.TransformerException;
importjavax.xml.transform.TransformerFactory;
importjavax.xml.transform.TransformerFactoryConfigurationError;
importjavax.xml.transform.dom.DOMSource;
importjavax.xml.transform.stream.StreamResult;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
importorg.w3c.dom.NodeList;
importorg.w3c.dom.Text;
importorg.xml.sax.SAXException;
//在学生管理系统里面,学生的学号是唯一的,姓名有可能重复
publicclassStudentManager{
publicstaticvoidmain(String[]args){
try{
Documentdoc=Domutils.getDoc(newFile("xml文件的相对路径"));
Scannerinput=newScanner(System.in);
System.out.println("欢迎来到学生管理系统\n\n\n请输入你要进行什么操作是:\n1.添加学生信息\n2.删除学生信息\n3.修改学生信息\n(请输入前边的序号)");
intnum=input.nextInt();
if(num==1){
addStudent(doc);
}elseif(num==2){
delStudent(doc);
}elseif(num==3){
updStudent(doc);
}
}catch(SAXExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(ParserConfigurationExceptione){
e.printStackTrace();
}
}
//修改学生信息
privatestaticvoidupdStudent(Documentdoc){
ElementupdStudent=null;
Scannerinput=newScanner(System.in);
System.out.println("请输入你要修改的学生的学号:");
Stringstudentid=input.nextLine();
System.out.println("请输入新学生的姓名:");
StringnewName=input.nextLine();
System.out.println("请输入新学生的年龄:");
StringnewAge=input.nextLine();
//将每一个学生的列出来,for循环判断你要修改信息的学生是哪一个
NodeListlist=doc.getElementsByTagName("student");
for(inti=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;
}
}
//找出根元素,将修改后的元素持久化到文件
Elementroot=doc.getDocumentElement();
transform(root);
System.out.println(updStudent);
}
//删除学生信息
privatestaticvoiddelStudent(Documentdoc){
Scannerinput=newScanner(System.in);
//输入你要删除的学生的学号
System.out.println("请输入要删除学生的学号:");
Stringstudentid=input.nextLine();
Elementroot=doc.getDocumentElement();
//将学生列成一个表,进行遍历,找对应学号的学生进行删除
NodeListlist=doc.getElementsByTagName("student");
for(inti=0;i<list.getLength();i++){
if((studentid).equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){
ElementdelStudent=(Element)doc.getElementsByTagName("student").item(i).getFirstChild().getParentNode();
root.removeChild(delStudent);
break;
}else{
System.out.println("没有该学生");
break;
}
}
//持久化到文件
transform(root);
}
//添加学生信息
privatestaticvoidaddStudent(Documentdoc){
//System.out.println(doc.getElementsByTagName("student").item(1).getAttributes().getNamedItem("id").getNodeValue());
Elementroot=doc.getDocumentElement();
//从控制台输入
Scannerinput=newScanner(System.in);
System.out.println("请输入学生的序号:id=");
//将学生放到一个列表里面,看我们要添加的学生的学号里面是否已经有了,如果有,需要将新加入的学生的学号改一下
NodeListlist=doc.getElementsByTagName("student");
Stringstudentid=input.nextLine();
for(inti=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=");
Stringname_value=input.nextLine();
System.out.println("请输入要添加学生的年龄:age=");
Stringage_value=input.nextLine();
//创建节点
Elementstudent=doc.createElement("student");
Elementname=doc.createElement("name");
Elementage=doc.createElement("age");
TextnamText=doc.createTextNode(name_value);
TextageText=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);
}
//持久化到文件的方法
privatestaticvoidtransform(Elementroot)
throwsTransformerFactoryConfigurationError{
TransformerFactoryfactory=TransformerFactory.newInstance();
try{
Transformertf=factory.newTransformer();
tf.transform(newDOMSource(root),newStreamResult(newFile("src/com/briup/dom/student.xml")));
}catch(TransformerConfigurationExceptione){
e.printStackTrace();
}catch(TransformerExceptione){
e.printStackTrace();
}
}
}
2.Dom解析文件(将获取解析文件的部分封装起来)
importjava.io.File;
importjava.io.IOException;
importjava.nio.file.attribute.AclEntry.Builder;
importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.parsers.ParserConfigurationException;
importorg.w3c.dom.Document;
importorg.xml.sax.SAXException;
publicclassDomutils{
publicstaticDocumentgetDoc(Filefile)throwsSAXException,IOException,ParserConfigurationException{
//获取工厂模式
DocumentBuilderFactoryfactory=
DocumentBuilderFactory.newInstance();
//获取builder对象
DocumentBuilderbuilder=factory.newDocumentBuilder();
//将要解析文件加载成一个树状文件,开始解析
Documentdocument=builder.parse(file);
returndocument;
}
}
以上这篇将xml文件作为一个小的数据库,进行学生的增删改查的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。