zoukankan      html  css  js  c++  java
  • 使用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")));
        }
    }
  • 相关阅读:
    转char varchar nvarchar区别
    NHibernate和Spring.Net框架介绍(一)
    ASP.NET面试题(一)
    存储过程编写经验和优化措施
    软件工程师不可不知的10个概念
    优化数据库前问自己的10个问题
    ZOJ 1610 Count the Colors (线段树)
    POJ 3667 Hotel (线段树)
    HDU Best Reward (扩展KMP)
    POJ 3277 City Horizon (线段树)
  • 原文地址:https://www.cnblogs.com/jiangxifanzhouyudu/p/6821339.html
Copyright © 2011-2022 走看看