xml的解析方式---增删改查(三)

 //////////只是更改了内存中dom树的信息,要永久生效必须序列化且修改时还要覆盖原文件///////////
        /* 把dom对象序列化到磁盘文件 ----※技术入口: 
              要用到javax.xml.transform.Transformer类中的
           transform(soure,result)方法                */

public class Dom {

    //查: 把users.xml中的每一个user元素的信息输出
    @Test
    public void iteratorDemo() throws Exception{
        
        //document
        Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("./xml/users.xml");
        
        //root
        Element eUsers = (Element) dom.getFirstChild();
        NodeList nodeList = eUsers.getElementsByTagName("user"); //所有<user>节点的集合
        
        //遍历
        for(int i=0; i<nodeList.getLength(); i++){
            Element eUser = (Element) nodeList.item(i);
            String name = eUser.getElementsByTagName("name").item(0).getTextContent();
            String age = eUser.getElementsByTagName("age").item(0).getTextContent();
            String id = eUser.getAttribute("id");
            System.out.println("id:"+id+",name:"+name+",age:"+age);
            System.out.println("----------");
        }
    }
    
    //改: 把users.xml中的最后一个user元素的age设为20
    //基本套路:根据要求把内存中的dom对象进行修改,然后利用Transform工具进行序列化
    @Test
    public void updateDemo() throws Exception{
        
        //document
        Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("./xml/users.xml");
        
        //root
        Element eUsers = (Element) dom.getFirstChild();
        NodeList nodeList = eUsers.getElementsByTagName("user"); //所有<user>节点的集合
        
        //获取最后一个<user>节点
        Element eLastUser= (Element) nodeList.item( nodeList.getLength()-1 );
        Node eAge = eLastUser.getElementsByTagName("age").item(0);
        eAge.setTextContent("120");
        
        //////////前面部分只是更改了内存中dom树的信息,要永久生效必须序列化且修改时还要覆盖原文件///////////
        /* 把dom对象序列化到磁盘文件 ----※技术入口: 
              要用到javax.xml.transform.Transformer类中的
           transform(soure,result)方法                */
        Transformer trans = TransformerFactory.newInstance().newTransformer();
        trans.transform(new DOMSource(dom), new StreamResult("./xml/users.xml"));//若文件已经存在则是修改,否则是"另存为"
        
    }
    
    //增: 向users.xml中的添加一个user元素
    //基本套路:根据要求把内存中的dom对象进行修改,然后利用Transform工具进行序列化
    @Test
    public void addDemo() throws Exception{
        Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("./xml/users.xml");
        Element eUsers = (Element) dom.getFirstChild();
        
        //创建一个新的<user>元素,并组装成一棵子树添加到<users>节点
        
        Element eUser = dom.createElement("user"); //复杂节点需要添加子节点
        eUser.setAttribute("id", "B002");//属性可以直接设置
        
        //简单节点直接设置内容文本与属性
        Element eName = dom.createElement("name");
        eName.setTextContent("张三丰");
        Element eAge = dom.createElement("age");
        eAge.setTextContent("28");
        
        //组装<user>子树: 让eUser添加两个孩子:eName,eAge
        eUser.appendChild(eName);
        eUser.appendChild(eAge);
        
        //把子树eUser添加到dom树的文档根节点eUsers
        eUsers.appendChild(eUser);
        
        
        ///////////不要忘记序列化//////////////
        Transformer trans = TransformerFactory.newInstance().newTransformer();
        trans.transform(new DOMSource(dom), new StreamResult("./xml/users.xml"));
    }
    
    //删: 把users.xml中的最后一个user元素删除
    //基本套路:根据要求把内存中的dom对象进行修改,然后利用Transform工具进行序列化
    @Test
    public void delDemo() throws Exception{
        Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("./xml/users.xml");
        Element eUsers = (Element) dom.getFirstChild();
        
        //找到最后一个<user>节点
        //Node lastNode = eUsers.getLastChild();//有bug版本
        NodeList nodeList = eUsers.getElementsByTagName("user"); //所有<user>节点的集合
        Node lastNode = nodeList.item( nodeList.getLength()-1 );
        //让lastNode执行:找父亲删自己
        lastNode.getParentNode().removeChild(lastNode);
        
        ///////////不要忘记序列化//////////////
        Transformer trans = TransformerFactory.newInstance().newTransformer();
        trans.transform(new DOMSource(dom), new StreamResult("./xml/users.xml"));
    }
        
}

猜你喜欢

转载自blog.csdn.net/qq_35307947/article/details/81942306