dom4j的读写XML文件

java用dom4j读写xml很方便,工作之余,做了一点小总结。xml文件格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
     <dbip port="3306">127.0.0.1</dbip>
</Root>

1、读取dbip节点的值“127.0.0.1”和port的值“3306”.

    /**
     * 获取IP和port的值
     * @throws Exception
     */
    public void showIpPort() throws Exception{
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new File("D:\\aa.xml"));
        String ip = doc.getRootElement().elementText("dbip");
        String port = doc.getRootElement().element("dbip").attributeValue("port");
        //将结果打印出来
        System.out.println(ip+"==="+port);
    }

2、添加dbip节点。

    /**
     * 添加一个dbip节点
     * @throws Exception
     */
    public void addNode() throws Exception{
        SAXReader read = new SAXReader();
        File f = new File("D:\\aa.xml");
        Document doc = read.read(new File("D:\\aa.xml"));
        Element root = doc.getRootElement();
        Element dbip = root.addElement("dbip");
        dbip.setText("192.168.1.201");
        dbip.addAttribute("port","8080");
        
        //修改
        XMLWriter output = new XMLWriter(new FileWriter(f));
        output.write(doc);
        output.close();
    }

添加后的xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <dbip port="3306">127.0.0.1</dbip>
    <dbip port="8080">192.168.1.201</dbip>
</Root>

3、修改port为8080的节点dbip的port的值为8088,值为192.168.1.202.

    /**
     * 修改port为8080的节点dbip的port的值为8088,值为192.168.1.202
     * @throws Exception
     */
    public void upNode() throws Exception{
        SAXReader read = new SAXReader();
        File f = new File("D:\\aa.xml");
        Document doc = read.read(new File("D:\\aa.xml"));
        Element root = doc.getRootElement();
        List<Element> list = root.elements("dbip");
        for(Element dbip:list){
            if(dbip.attributeValue("port").equals("8080")){
                dbip.setText("192.168.1.202");
                dbip.attribute("port").setValue("8088");
                
            }
        }
        
        //修改
        XMLWriter output = new XMLWriter(new FileWriter(f));
        output.write(doc);
        output.close();
        System.out.println("修改完毕");
    }

修改后的XML如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <dbip port="3306">127.0.0.1</dbip>
    <dbip port="8088">192.168.1.202</dbip>
</Root>

4、删除port为8088的dbip节点.

    /**
     * 删除port为8088的dbip节点
     * @throws Exception
     */
    public void delNode() throws Exception{
        SAXReader read = new SAXReader();
        File f = new File("D:\\aa.xml");
        Document doc = read.read(f);
        Element root = doc.getRootElement();
        List<Element> list = root.elements("dbip");
        
        for(int i=0;i<list.size();i++){
            Element dbip = list.get(i);
            if(dbip.attributeValue("port").equals("8088")){
                list.remove(i);
            }
        }
        //这里不能用以下这种方式,否则会报一个下面的错误
        //java.util.ConcurrentModificationException
//        for(Element dbip:list){
//            if(dbip.attributeValue("port").equals("8088")){
//                list.remove(dbip);
//            }
//        }
        
        //修改
        XMLWriter output = new XMLWriter(new FileWriter(f));
        output.write(doc);
        output.close();
        System.out.println("删除完毕");
    }

删除后的XML如图所示:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <dbip port="3306">127.0.0.1</dbip>
</Root>
原文地址:https://www.cnblogs.com/gaojiang/p/3056538.html