Dom4J解析

环境

在项目里创建lib包,把Dom4J.jar放入包里,add Library添加解析包

编写

 

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * Dom4j解析
 * @author Administrator
 *
 */
public class Dom4j {
    private Document document;

    /**
     * 获取Document对象
     */
    public void loadDocument() {
        SAXReader saxReader = new SAXReader();

        try {
            document = saxReader.read(new File("收藏信息.xml"));
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

    /**
     * 保存修改的XML
     */
    public void saveXML(String path) {
        OutputFormat format = OutputFormat.createPrettyPrint();//输出格式
        format.setEncoding("UTF-8");        //编码格式
        XMLWriter writer = null;
        try {
            writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(path),"UTF-8"),format);
            writer.write(document);
        } catch (UnsupportedEncodingException | FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }


    /**
     * 显示手机品牌和型号
     */
    public void showPhoneInfo() {
        //获取XML根节点
        Element root = document.getRootElement();
        //获取所有的<Brand>迭代器
        Iterator eleBrands = root.elementIterator();
        while(eleBrands.hasNext()) {
            Element brand = (Element)eleBrands.next();
            System.out.println(brand.attributeValue("name"));

            Iterator eleType = brand.elementIterator();
            while(eleType.hasNext()) {
                Element type = (Element)eleType.next();
                System.out.println("\t"+type.attributeValue("name"));
            }
        }
    }

    /**
     * 增加新的手机品牌及型号信息
     */
    public void addNewPhone() {
        //获得XML根元素
        Element root = document.getRootElement();
        //创建<brand name="HTC">
        Element eleBrand = root.addElement("Brand");
        eleBrand.addAttribute("name","HTC");
        //创建<brand name="HTC">
        Element eleType =eleBrand.addElement("Type");
        eleType.addAttribute("name","htc200");
    }

    /**
     * 修改手机添加id
     */
    public void  updatePhone() {
        Element root = document.getRootElement();
        Iterator eleBrands = root.elementIterator();
        int id = 0;
        while(eleBrands.hasNext()) {
            Element brand = (Element)eleBrands.next();
            id++;
            brand.addAttribute("id", id+"");
        }
        saveXML("新收藏信息.xml");        
    }

    /**
     * 删除节点
     */
    public void deletePhone() {
        Element root = document.getRootElement();
        Iterator eleBrands = root.elementIterator();
        while(eleBrands.hasNext()) {
            Element brand = (Element)eleBrands.next();
            if(brand.attributeValue("name").equals("")) {
                brand.getParent().remove(brand); //删除
            }
        }
    }
    /**
     * main方法
     * @param args
     */
    public static void main(String[] args) {
        Dom4j d= new Dom4j();
        d.loadDocument();            //获取XML
        d.addNewPhone();            //添加手机
        d.updatePhone();            //给手机添加id
        d.showPhoneInfo();            //展示信息
        d.deletePhone();            //删除手机
        d.saveXML("新收藏信息.xml");    //保存XML
    }
}

 

运行前

 

运行后

 

 

posted @ 2019-03-17 18:25  纸灰  阅读(132)  评论(0编辑  收藏  举报