使用dom方式解析xml并对xml进行增删改查的操作
创建xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><doctor>
<name>李四</name>
<age>25</age>
<hobby>篮球</hobby>
</doctor>
刘君 19 乒乓球 王八 40
package pratice.xml;
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;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.IOException;
public class DoctorTest {
public static void main(String[] args) {
DoctorTest doctor=new DoctorTest();
doctor.deleter();
doctor.insert();
doctor.update();
doctor.showInfor();
}
Document doc=null;
//查询功能
public void showInfor()
{
//创建解析工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//创建解析器
try {
DocumentBuilder builder=factory.newDocumentBuilder();
//输入解析文件
doc=builder.parse("src/doctor.xml");
//解析doctors节点
NodeList doctorslist= doc.getElementsByTagName("doctors");
//获取doctors的第一个节点
Node doctorsnode=doctorslist.item(0);
//获取它的doctor子节点
NodeList doctorlist=((Element)doctorsnode).getElementsByTagName("doctor");
//遍历doctor的节点
for(int i=0;i<doctorlist.getLength();i++)
{
//获取单个doctor节点
Node doctornode=doctorlist.item(i) ;
//去除换行,空格等节点
if(((Element)doctornode).getNodeType()==Node.ELEMENT_NODE)
{
//获取doctor的子节点name
NodeList namelist=((Element)doctornode).getElementsByTagName("name");
//获取doctor子节点age
NodeList agelist=((Element)doctornode).getElementsByTagName("age");
//由于我的xml中每一个doctor中只有一个age ,name节点就不需要进行遍历获取,直接通过下标获取即可
String name=((Element)namelist.item(0)).getTextContent();
String age=((Element)agelist.item(0)).getTextContent();
System.out.println("姓名:"+name+"年龄:"+age);
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void deleter()
{
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder=factory.newDocumentBuilder();
doc=builder.parse("src/doctor.xml");
NodeList doctorslist=doc.getElementsByTagName("doctors");
Node doctorsnode=doctorslist.item(0);
NodeList doctorlist=((Element)doctorsnode).getElementsByTagName("doctor");
for(int i=0;i<doctorlist.getLength();i++)
{
//只要是for循环首先去除空格和换行
Node doctornode=doctorlist.item(i) ;
if(doctornode.getNodeType()== Node.ELEMENT_NODE)
{
NodeList namelist=((Element) doctornode).getElementsByTagName("name");
NodeList agelist=((Element) doctornode).getElementsByTagName("age");
String name=namelist.item(0).getTextContent();
String age=agelist.item(0).getTextContent();
if(name.equals("张三"))
{
doctornode.getParentNode().removeChild(doctornode);
}
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
this.save("src/doctor.xml");
}
//保存功能
public void save(String path)
{
TransformerFactory factory=TransformerFactory.newInstance();
try {
Transformer form=factory.newTransformer();
DOMSource source=new DOMSource(doc);
StreamResult result=new StreamResult(new File(path));
try {
form.transform(source,result);
} catch (TransformerException e) {
e.printStackTrace();
}
} catch (TransformerConfigurationException e) {
e.printStackTrace();
}
}
//添加功能
public void insert()
{
Element ele1= doc.createElement("doctor");
Element ele11=doc.createElement("name");
ele11.setTextContent("王八");
Element ele12=doc.createElement("age");
ele12.setTextContent("28");
ele1.appendChild(ele11);
ele1.appendChild(ele12);
NodeList node=doc.getElementsByTagName("doctors");
((Element)node.item(0)).appendChild(ele1);
this.save("src/doctor.xml");
}
public void update()
{
NodeList doctorlist=doc.getElementsByTagName("doctor");
for(int i=0;i<doctorlist.getLength();i++)
{
Node doctornode=doctorlist.item(i);
if(doctornode.getNodeType()==Node.ELEMENT_NODE)
{
Element doctorele=(Element) doctornode;
NodeList namelist=doctorele.getElementsByTagName("name");
Node namenode=namelist.item(0);
NodeList agelist=doctorele.getElementsByTagName("age");
Node agenode=agelist.item(0);
Element ageele=(Element)agenode;
Element nameele=(Element)namenode;
if(nameele.getTextContent().equals("王八"))
{
ageele.setTextContent("40");
}
}
}
this.save("src/doctor.xml");
}
}