package main.demo;
import main.util.OperateDOM;
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 java.io.IOException;
/**
* Created by QXJJ1697 on 2017/4/21.
*/
public class DOMparseDemo {
public static void main(String[] args) {
OperateDOM operateDOM = new OperateDOM();
Document document = operateDOM.common("src/xml/student.xml");
//operateDOM.add(document,"src/xml/student.xml");
//operateDOM.read(document);
//operateDOM.update(document,"src/xml/student.xml");
operateDOM.delete(document,"src/xml/student.xml");
operateDOM.read(document);
}
}
package main.util;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
/**
* Created by QXJJ1697 on 2017/4/26.
*/
public class OperateDOM {
public Document common(String uri){
Document document = null;
//创建解析器工厂对象
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
try {
//解析器工厂对象创建解析器对象
DocumentBuilder db = dbf.newDocumentBuilder();
//解析器对象指定XML文件创建Document对象
document = db.parse(uri);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return document;
}
//读取
public void read(Document document){
//以Document对象为起点操作DOM树
NodeList student = document.getElementsByTagName("student");
//查询
for(int i = 0;i < student.getLength(); i++){
Node stu = student.item(i);
//获取所有name属性集合 不知道属性名和属性个数·
NamedNodeMap attrs = stu.getAttributes();
//遍历student的属性
for(int j = 0; j < attrs.getLength(); j++){
Node attr = attrs.item(j);
System.out.print("属性:"+attr.getNodeName());
System.out.println("属性值:"+attr.getNodeValue());
}
//已经知道属性个数和属性名
//Element element = (Element)stu;
//获取标签元素属性值
// System.out.println(element.getAttribute("name"));
//获取标签元素名称
//System.out.println(element.getNodeName());
//获取标签元素文本内容
//System.out.println(element.getTextContent());
//NodeList childs = element.getChildNodes();
// for(int j = 0;j < childs.getLength(); j++ ){
// Node child = childs.item(j);
// //此处对node需要进行判断,因为getChildNodes()方法会将空白换行符也当做一个节点
// if(child.getNodeType() == Node.ELEMENT_NODE){
// Element ele = (Element)child;
// System.out.println(ele.getNodeName());
// //System.out.println(ele.getAttribute("id"));
// //System.out.println(ele.getAttribute("score"));
//System.out.println(ele.getFirstChild().getNodeValue());
// System.out.println(ele.getTextContent());
// }
// }
}
}
//插入
public void add(Document document,String uri){
Element stu = document.createElement("student");
stu.setAttribute("name","王二麻子");
Element grade = document.createElement("garde");
grade.setAttribute("id","004");
grade.setTextContent("二年级");
Element number = document.createElement("number");
number.setAttribute("score","85");
number.setTextContent("4");
stu.appendChild(grade);
stu.appendChild(number);
document.getElementsByTagName("students").item(0).appendChild(stu);
this.save(document,uri);
}
//修改
public void update(Document document,String uri){
NodeList student = document.getElementsByTagName("student");
for(int i = 0 ;i < student.getLength(); i++ ){
Node stu = student.item(i);
Element ele = (Element)stu;
if(ele.getAttribute("name").equals("张三")) {
ele.setAttribute("name", "长泽雅美");
this.save(document,uri);
}
}
}
//删除
public void delete(Document document,String uri){
NodeList student = document.getElementsByTagName("student");
for(int i = 0 ;i < student.getLength(); i++ ){
Node stu = student.item(i);
Element ele = (Element)stu;
if(ele.getNodeType() == Node.ELEMENT_NODE) {
//System.out.println("delete"+ele.getAttribute("name"));
if (ele.getAttribute("name").equals("王二麻子")) {
ele.getParentNode().removeChild(ele);
this.save(document,uri);
}
}
}
}
//保存
private void save(Document document,String uri){
try {
TransformerFactory tf = TransformerFactory.newInstance();
//缩进
tf.setAttribute("indent-number",5);
Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.ENCODING,"utf-8");
t.setOutputProperty(OutputKeys.INDENT,"yes");
DOMSource ds = new DOMSource(document);
StreamResult sr = new StreamResult(new OutputStreamWriter(new FileOutputStream(uri),"UTF-8"));
t.transform(ds,sr);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student name="长泽雅美">
<grade id="001">二年级</grade>
<number score="80">1</number>
</student>
<student name="李四">
<grade id="002">二年级</grade>
<number score="88">2</number>
</student>
<student name="王五">
<grade id="003">二年级</grade>
<number score="90">3</number>
</student>
</students>