import java.io.FileOutputStream;
import java.io.IOException;
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 org.junit.Test;
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;
public class BookCRUD {
//遍历节点
@Test
public void read() throws ParserConfigurationException, SAXException, IOException{
//创建工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder db =factory.newDocumentBuilder();
//获取document对象,对xml进行解析
Document document=db.parse("src/com/csdn/xml/book.xml");
//得到节点
Node node = document.getElementsByTagName("books").item(0);
//遍历所有节点
list(node);
}
private void list(Node node){
if(node instanceof Element){
System.out.println(node.getNodeName());
}
NodeList list = node.getChildNodes();
for(int i=0;i<list.getLength();i++){
Node child = list.item(i);
list(child);
}
}
//添加节点
@Test
public void insert() throws ParserConfigurationException, SAXException, IOException, TransformerException{
//创建工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder db =factory.newDocumentBuilder();
//获取document对象,对xml进行解析
Document document=db.parse("src/com/csdn/xml/book.xml");
//创建节点
Element element = document.createElement("press");
element.setTextContent("华文出版社");
//加入节点
Element ele = (Element) document.getElementsByTagName("book").item(0);
ele.appendChild(element);
//把添加的节点写到xml文件中
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/com/csdn/xml/book.xml")));
}
//在指定位置添加节点
@Test
public void insert1() throws ParserConfigurationException, SAXException, IOException, TransformerException{
//创建工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder db =factory.newDocumentBuilder();
//获取document对象,对xml进行解析
Document document=db.parse("src/com/csdn/xml/book.xml");
//创建节点
Element element = document.createElement("money");
element.setTextContent("38.80元");
//选取参考节点
Element press = (Element) document.getElementsByTagName("bookname").item(0);
Element book = (Element) document.getElementsByTagName("book").item(0);
book.insertBefore(element, press);
//更改xml文件
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/com/csdn/xml/book.xml")));
}
//删除节点
@Test
public void delete() throws ParserConfigurationException, SAXException, IOException, TransformerException{
//创建工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder db =factory.newDocumentBuilder();
//获取document对象,对xml进行解析
Document document=db.parse("src/com/csdn/xml/book.xml");
//获取要删除的节点
Element element = (Element) document.getElementsByTagName("press").item(0);
//获取要删除的节点的父节点
Element parent = (Element) element.getParentNode();
parent.removeChild(element);
//更改xml文件
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/com/csdn/xml/book.xml")));
}
//更新
@Test
public void update() throws ParserConfigurationException, SAXException, IOException, TransformerException{
//创建工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder db =factory.newDocumentBuilder();
//获取document对象,对xml进行解析
Document document=db.parse("src/com/csdn/xml/book.xml");
//获取要更新的节点
Element element = (Element) document.getElementsByTagName("bookwriter").item(0);
element.setTextContent("黎小莫");
//更新xml文件
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/com/csdn/xml/book.xml")));
}
}