使用dom解析器对xml文档内容进行增删查改

直接添代码:

XML文档名称(one.xml)

<?xml version="1.0" encoding="UTF-8" standalone="no"?><school>
    北京大学
    <student>
        00012
        <name>张三</name>
    <birthday name="mmmmmm">8月26日</birthday></student>
</school>

相关Java代码

package Dom;

import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
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;

public class Xml_DOM_resolver {
    @Test
    public void reading() throws Exception {//读    XML    文档
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();//创建一个新的 DocumentBuilder 实例。
        Document document = documentBuilder.parse("src/one.xml");//将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。
        NodeList list = document.getElementsByTagName("name");//获取指定元素名
        Node node = list.item(0);//获取元素下的内容
        String content = node.getTextContent();
        System.out.println(content);

    }

    @Test
    public void reading1() throws Exception {//读    XML    文档
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();//创建一个新的 DocumentBuilder 实例。
        Document document = documentBuilder.parse("src/one.xml");//将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。
        //得到根节点
        Node root = document.getElementsByTagName("school").item(0);//获取指定元素名
        list(root);

    }

    private void list(Node node) {
        // TODO Auto-generated method stub
        if (node instanceof Element) {//判断当前的是不是元素(标签)
            System.out.println(node.getNodeName());
        }
        NodeList list = node.getChildNodes();//获取当前XML的所有节点
        for (int i = 0; i < list.getLength(); i++) {
            Node child = list.item(i);
            String childname = child.getNodeName();//获取当前节点的元素名称
            list(child);
        }
    }

    @Test
    //得到xml标签中的属性值(name)
    public void reading2() throws Exception {//读    XML    文档
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();//创建一个新的 DocumentBuilder 实例。
        Document document = documentBuilder.parse("src/one.xml");//将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。
        //在知道是元素的时候可以实现强转
        Element root = (Element) document.getElementsByTagName("student").item(0);//获取指定元素名
        String nature = root.getAttribute("name");
        System.out.println(nature);
    }

    @Test
    public void add() throws Exception {//对XML文档进行指定位置添加节点
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();//创建一个新的 DocumentBuilder 实例。
        Document document = documentBuilder.parse("src/one.xml");//将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。
        //创建节点
        Element brith = document.createElement("birthday");
        brith.setTextContent("八月二十五日");
        brith.setAttribute("name", "mmmmmm");
        //获取参考节点
        Element birthnode = (Element) document.getElementsByTagName("birthday").item(0);//获取指定元素名
        //把节点挂在student上
        Element root = (Element) document.getElementsByTagName("student").item(0);//获取指定元素名
        root.insertBefore(brith, birthnode);
        //         root.appendChild(brith);
        //把更新后的内存数写回去
        TransformerFactory trans = TransformerFactory.newInstance();
        Transformer tr = trans.newTransformer();
        tr.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/one.xml")));
    }

    @Test
    public void delet() throws Exception {//对XML文档就行添加节点
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();//创建一个新的 DocumentBuilder 实例。
        Document document = documentBuilder.parse("src/one.xml");//将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。
        //得到要删除的节点
        Element brith = (Element) document.getElementsByTagName("birthday").item(0);//获取指定元素名
        //得到要删除元素的父节点
        Element partent = (Element) document.getElementsByTagName("student").item(0);//获取指定元素名
        //         partent.removeChild(brith);//使用remove方法删除节点
        //创建节点
        Element sex = document.createElement("sex");
        sex.setTextContent("男");
        //使用替换方法,替换节点
        partent.replaceChild(sex, brith);
        //把更新后的内存数写回去
        TransformerFactory trans = TransformerFactory.newInstance();
        Transformer tr = trans.newTransformer();
        tr.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/one.xml")));
    }
    @Test
    public void updata() throws Exception {//对XML文档就行添加节点
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();//创建一个新的 DocumentBuilder 实例。
        Document document = documentBuilder.parse("src/one.xml");//将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。
        //得到要更新数据的节点
        Element brith = (Element) document.getElementsByTagName("birthday").item(0);//获取指定元素名
        brith.setTextContent("8月26日");//设置要更新是数据
        //把更新后的内存数写回去
        TransformerFactory trans = TransformerFactory.newInstance();
        Transformer tr = trans.newTransformer();
        tr.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/one.xml")));
    }
}
原文地址:https://www.cnblogs.com/jiangxifanzhouyudu/p/6821339.html