dom4j的基本增删改查和dom4j的新增xml文档

public class Dom4jDemo {
    
    @Test
    public void hello() throws Exception{
        SAXReader reader = new SAXReader();
        Document dom = reader.read("./xml/users.xml");
        Element eRoot = dom.getRootElement();
        String name = eRoot.getName();
        System.out.println(name);
        
    }//需求:读取第一个<user>中的信息
    @Test
    public void demo1() throws Exception{
        Document dom = new SAXReader().read( new File("./xml/users.xml"));
        Element root = dom.getRootElement();
        Element eUser = root.element("user"); //获取root下的第一个<user>子节点
        String id = eUser.attributeValue("id");
        String name = eUser.element("name").getText();//法1
        String name2 = eUser.elementText("name");//法2--功能与上一行等价
        String age = eUser.elementText("age");
        System.out.println(id+","+name+","+name2+","+age);
    }
    
    //查,需求:遍历出文档中的所有<user>的信息
    @Test
    public void queryAll() throws Exception{
        Document dom = new SAXReader().read("./xml/users.xml");
        Element root = dom.getRootElement();
        List<Element> list = root.elements();//获取root下的所有子节点 且封装到一个java.util.List中
        for(Element e: list){
            String id = e.attributeValue("id");
            String name = e.elementText("name");
            String age = e.elementText("age");
            System.out.println(id+","+name+","+age);
        }
        System.out.println("-----------------");
        
        Iterator<Element> it = root.elementIterator();//获取root下的所有子节点 且封装到一个迭代器中
        while(it.hasNext()){
            Element e = it.next();
            String id = e.attributeValue("id");
            String name = e.elementText("name");
            String age = e.elementText("age");
            System.out.println(id+","+name+","+age);
        }
    }
    
    //增,需求:给xml文档添加一个<stu>元素
    @Test
    public void addElement() throws Exception{
        Document dom = new SAXReader().read("./xml/users.xml");
        Element root = dom.getRootElement();
        
        //添加并封装一个<stu>子节点
        Element eStu = root.addElement("stu");
        eStu.addAttribute("id", "S002");
        Element eName = eStu.addElement("name");
        eName.addText("李同学");//添加文本内容,法1
        Element eAge = eStu.addElement("age");
        eAge.setText("22");//添加文本内容,法2---原来没有内容,因此添加和设置效果是一样的
        
        ///////序列化///////
        //法1: 普通方式
        XMLWriter w = new XMLWriter( new PrintWriter("./xml/users.xml"));
        w.write(dom);
        w.close();
        
        //法2: 利用OutputFormat类进行格式化输出,如采用指定的编码
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("GBK");
        XMLWriter w2 = new XMLWriter(new FileOutputStream("./xml/users2.xml"), format);
        w2.write(dom);
        w2.close();
    }
    
    //删,需求:删除root下的最后一个子元素
    //改,需求:修改root下的最后一个子元素
    @Test
    public void delAndUpdateElement() throws Exception{
        Document dom = new SAXReader().read("./xml/users.xml");
        Element root = dom.getRootElement();
        
        //找到最后一个元素
        List<Element> list = root.elements();//所有子元素
        Element lastE = list.get( list.size()-1 );
        
        //////////////////////////////////
        //删除最后一个元素---找父亲删自己
        //lastE.getParent().remove(lastE);
        
        //修改最后一个元素
        lastE.addAttribute("id", "S007");
        lastE.element("name").setText("OKOK");
        lastE.element("age").setText("111");
        /////////////////////////////////
        
        
        //序列化
        XMLWriter w = new XMLWriter(new FileWriter("./xml/users.xml"));
        w.write(dom);
        w.close();
    }

//从零开始创建一个新的xml文档
    @Test
    public void createNewXML() throws Exception{
        Document dom = DocumentHelper.createDocument();
        Element root = dom.addElement("cities");
        Element eCity = root.addElement("city");
        eCity.addAttribute("id", "C001");
        eCity.addElement("name").setText("益阳");
        eCity.addElement("addr").setText("湖南");
        
        //序列化
        XMLWriter w = new XMLWriter(new FileWriter("./xml/citys.xml"));
        w.write(dom);
        w.close();
    }

猜你喜欢

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