JAVA高级基础---DOM解析

package com.zjx.dom;

import java.io.FileNotFoundException;
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.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;
/*

    *DOM解析XML文件

*/

public class DOM {
        //命名一个Document文件用来中转文件
	static Document doc=null;
        //通过DocumentBuilderFactory解析得到xml文件
	public static void getDOM() {
		try {
			// 获得DocumentBuilderFactory工场对象
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			// 通过工场创建解析器
			DocumentBuilder db=factory.newDocumentBuilder();
			// 通过解析器获得XML文件
			doc = db.parse("books.xml");
		} catch (ParserConfigurationException | SAXException | IOException e) {
			e.printStackTrace();
		}
	}
        //保存文件方法,一般通过TransformerFactory转换工场进行转换为所需要的格式
        //设置保存格式,保存为我们需要的文件格式    
	public static void saveDOM() throws TransformerConfigurationException {
		try {
			// 获得TransformerFactory转换工场
			TransformerFactory tff = TransformerFactory.newInstance();
			// 通过工场创建转换器
			Transformer tf = tff.newTransformer();
			// 设定转换格式
			tf.setParameter(OutputKeys.ENCODING, "UTF-8");
			// 在cpu中找出doc文件
			DOMSource source = new DOMSource(doc);
			// 执行保存路径,如果保存路径和原来路径一样,覆盖原来文件
			StreamResult srl = new StreamResult(new FileOutputStream("books.xml"));
			// 保存
			tf.transform(source, srl);
		} catch (FileNotFoundException | TransformerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
        //向xml文件中添加元素
	public void addXML() throws TransformerConfigurationException {
		// 使用DOM添加元素的方法,添加文件的五个元素
		Element book = doc.createElement("book");
		Element name = doc.createElement("name");
		Element zuozhe = doc.createElement("zuozhe");
		Element zyrw = doc.createElement("zyrw");
		Element guojia = doc.createElement("guojia");
		// 给name/zuozhe/zyrw/guojia元素赋值
		name.setTextContent("三国演义");
		zuozhe.setTextContent("罗贯中");
		zyrw.setTextContent("赵子龙");
		guojia.setTextContent("China");
		// 想节点中插入元素
		book.appendChild(name);
		book.appendChild(zuozhe);
		book.appendChild(zyrw);
		book.appendChild(guojia);
		// 将节点插入
		doc.getElementsByTagName("books").item(0).appendChild(book);
		// 保存文件
		saveDOM();
		System.out.println("保存成功!");

	}
        //删除没某个节点
	public void delDOM(String name) throws Exception{
                //获得书名元素集合
		NodeList nodeList = doc.getElementsByTagName("name");
                //通过nodelist集合遍历
		for (int i = 0; i < nodeList.getLength(); i++) {
                        //获取每一个book节点
			Node itembook = nodeList.item(i);
			if (itembook.getTextContent().equals(name)) {
                                //返回父节点,删除自身
				itembook.getParentNode().getParentNode().removeChild(itembook.getParentNode());
				break;
			}
			
		}
		saveDOM();
		System.out.println("删除成功!");
	}
        //查看XML文件
	public void findallDOM(){
		NodeList name = doc.getElementsByTagName("name");
		NodeList  zuozhe= doc.getElementsByTagName("zuozhe");
		NodeList zyrw = doc.getElementsByTagName("zyrw");
		NodeList guojia = doc.getElementsByTagName("guojia");
		System.out.println("书名\t\t作者\t\t主要人物\t\t国家");
		for (int i = 0; i < name.getLength(); i++) {
			Node bname = name.item(i);
			Node bzuozhe = zuozhe.item(i);
			Node bzyrw = zyrw.item(i);
			Node bguojia = guojia.item(i);
			System.out.println(bname.getTextContent()+"\t\t"+bzuozhe.getTextContent()+"\t\t"+bzyrw.getTextContent()+"\t\t"+bguojia.getTextContent());
		}
	}
        //修改文件内容
	public void updataDOM(String name,String value) throws Exception{
                //获得书名元素集合
		NodeList name1 = doc.getElementsByTagName("name");
		NodeList zyrw = doc.getElementsByTagName("zyrw");
                //通过name1遍历
		for (int i = 0; i < name1.getLength(); i++) {
                        //获取第i个book节点
			Node bname = name1.item(i);
			Node bzyrw = zyrw.item(i);
			if (bname.getTextContent().equals(name)) {
                                //通过bzyrw修改自身为value
				bzyrw.setTextContent(value);
				break;
			}
			
		}
		saveDOM();
		System.out.println("查看成功!");
	}
	public static void main(String[] args) throws Exception {
		DOM dom = new DOM();
		getDOM();
//		dom.addXML();
//		dom.delDOM("千与千寻");
//		dom.findallDOM();
		dom.updataDOM("虎胆龙威", "史泰龙");
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_42038771/article/details/80426974