This code is used:
xml: store data
dom4j
xpath
java
xml source code:
<?xml version="1.0" encoding="UTF-8"?>
<student>
<stu>
<id>1009</id>
<name>霍元甲</name>
<age>35</age>
</stu>
<stu>
<id>1003</id>
<name>张飞</name>
<age>25</age>
</stu>
<stu>
<id>1002</id>
<name>吕布</name>
<age>23</age>
</stu>
<stu>
<id>1005</id>
<name>赵云</name>
<age>26</age>
</stu>
</student>
Student source code:
package student;
public class Student {
private String id;
private String name;
private String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
Add, delete and check source code:
package student;
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class StudentService {
//添加元素
public static void add(Student student) throws Exception {
//创建解析器
SAXReader saxReader=new SAXReader();
//得到document
Document document=saxReader.read("src\\student.xml");
//得到根节点
Element root=document.getRootElement();
//在根节点里面创建stu元素
Element stu=root.addElement("stu");
//在stu里面添加元素id,name,age
Element id=stu.addElement("id");
Element name=stu.addElement("name");
Element age=stu.addElement("age");
//在id,name,age里面添加值
id.setText(student.getId());
name.setText(student.getName());
age.setText(student.getAge());
//回写操作
OutputFormat format=OutputFormat.createPrettyPrint();
XMLWriter xmlwriter=new XMLWriter(new FileOutputStream("src\\student.xml"), format);
xmlwriter.write(document);
xmlwriter.close();
}
//删除元素,根据学生的id删除
public static void deleteElement(String id) throws Exception {
//创建解析器
SAXReader saxReader=new SAXReader();
//得到document
Document document=saxReader.read("src\\student.xml");
//得到所有的id的集合,使用xpath的seleteNodes("//id")方法
List<Node> list=document.selectNodes("//id");
//遍历集合
for(Node node:list) {
//node是每一个id元素
//得到id元素里面的值
String idString=node.getText();
//判断id里面元素的值和传过去的id是否相同,如果相同,则删除id所在的stu
if(idString.equals(id)) {
//得到id的父节点stu
Element stu=node.getParent();
//得到stu的父节点student
Element student=stu.getParent();
//删除stu元素
student.remove(stu);
}
}
//回写操作
OutputFormat format=OutputFormat.createPrettyPrint();
XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("src\\student.xml"), format);
xmlWriter.write(document);
xmlWriter.close();
}
//查询元素,根据id查询学生信息
public static Student searchElement(String id) throws Exception {
//创建解析器
SAXReader saxReader=new SAXReader();
//得到document
Document document=saxReader.read("src\\student.xml");
//得到所有id元素的集合,使用xpath的selectNodes("//id")的方法
List<Node> list=document.selectNodes("//id");
//创建一个学生对象
Student s1=new Student();
//遍历集合list
for(Node node:list) {
//每一个node都是id
//得到id元素的值
String value=node.getText();
//判断遍历的id的值和传入的id的值是否一样
if(value.equals(id)) {
//获取id的父节点stu元素
Element stu=node.getParent();
//先得到name,age元素,再得到name,age元素的值
String nameString=stu.element("name").getText();
String ageString=stu.element("age").getText();
s1.setId(id);
s1.setName(nameString);
s1.setAge(ageString);
}
}
return s1;
}
}
Test source code:
package student;
public class TestStudent {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// add();
// delete();
Search();
}
//查询元素
public static void Search() throws Exception {
// TODO Auto-generated method stub
Student student=StudentService.searchElement("1009");
System.out.println(student.toString());
}
//添加元素
public static void add() throws Exception {
Student s1=new Student();
s1.setId("1005");
s1.setName("赵云");
s1.setAge("26");
StudentService.add(s1);
}
//删除元素
public static void delete() throws Exception{
StudentService.deleteElement("1002");
}
}