创建一个xml文件,用来存放学生信息,要求实现四个功能,
可以通过java代码查询数据,以及添加,修改和删除数据功能
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
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.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/*创建一个xml文件,用来存放学生信息,要求实现四个功能,
可以通过java代码查询数据,以及添加,修改和删除数据功能*/
//使用DOM解析XML文件
public class Test {
//收藏信息,xml对应的Document对象
private Document document;
//获得DOM树,获得Document对象
public void getStu() {
//获得解析器工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
try {
//根据解析器工厂获得解析器
DocumentBuilder builder=factory.newDocumentBuilder();
//解析器来解析XML文件获得Document对象
document=builder.parse("学生信息.xml");
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取学生相关信息
public void showInfo() {
//以Document做起点,先拿到所有的Stu点
NodeList stus=document.getElementsByTagName("Stu");
//遍历Stu,从中拿出每一个Stu节点
for(int i=0;i<stus.getLength();i++) {
Node node=stus.item(i);
Element eleStu=(Element)node;
String stuName=eleStu.getAttribute("name");
System.out.println(stuName);
}
}
//为XML文件添加元素
public void addEle() {
//(1)创建<Stu>
Element stu=document.createElement("Stu");
//(2)为<Stu>设置name的属性取值为小兰
stu.setAttribute("name", "小兰");
//将Stu放到Student中
document.getElementsByTagName("Student").item(0).appendChild(stu);
saceXML();
}
//保存XML文件(需要借助转换器:源(最新的DOM树)--》目的地(学生信息.xml),借助输出流)
public void saceXML() {
//转换器工厂
TransformerFactory factory=TransformerFactory.newInstance();
try {
//转换器
Transformer transformer=factory.newTransformer();
factory.setAttribute("indent-number", 4);
//指定转换格式
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
transformer.setOutputProperty(OutputKeys.INDENT, "YES");
//源(最新的DOM树)--》目的地(学生信息.xml)
DOMSource source=new DOMSource(document);
OutputStream out=new FileOutputStream("学生信息.xml");
StreamResult result=new StreamResult(new OutputStreamWriter(out));
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//修改元素
public void upddateEle() {
//获取所有的Stu
NodeList stus=document.getElementsByTagName("Stu");
for(int i=0;i<stus.getLength();i++) {
Node stu=stus.item(i);
Element stuEle=(Element)stu;
stuEle.setAttribute("age", (i+15)+"");
}
saceXML();
}
//删除 小明
public void deleteEle() {
//获取所有的Stu
NodeList stus=document.getElementsByTagName("Stu");
for(int i=0;i<stus.getLength();i++) {
Node stu=stus.item(i);
Element stuEle=(Element)stu;
if(stuEle.getAttribute("name").equals("小明")) {
stuEle.getParentNode().removeChild(stuEle);
}
}
saceXML();
}
public static void main(String[] args) {
Test test=new Test();
test.getStu();
// test.deleteEle();//删除数据
// test.upddateEle();//修改数据
// test.addEle();//添加数据
test.showInfo();//查询数据
}
}
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Student>
<Stu name="小明"></Stu>
<Stu name="小花"></Stu>
</Student>