DOM4J读写XML文件

加载dom4j依赖

<project ...>
	...
	<properties>
		<dom4j.version>2.1.1</dom4j.version>
	</properties>
	...
	<dependencies>
		<dependency>
      		<groupId>org.dom4j</groupId>
      		<artifactId>dom4j</artifactId>
      		<version>${dom4j.version}</version>
    	</dependency>
    </dependecies>
    ...
</project>

工具类

/**
 * @author xuefeibai
 * @create 2020-02-29 12:30
 */
public class Utils {

    /**
     * 获取类路径
     * @return 返回类路径
     */
    public static String classPath(){
        return Thread.currentThread().getContextClassLoader().getResource("").getPath();
    }
}

写XML文件

package www.xuefeibai.cn.utils;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import javax.validation.constraints.NotNull;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author xuefeibai
 * @decription 生成XML文件
 * @create 2020-02-29 11:37
 */
public class DOM4JWriter {

    public static void main(String[] args) {
        generate();
    }

    public static void generate(){
        Document doc = DocumentHelper.createDocument(); //创建document
        createAddressList(doc, new String[][]{          //创建通讯录
                {"张三", "zhangsan@qq.com", "13071634567", "广东省广州市科韵路11号"},
                {"李四", "lisi@qq.com", "13071634698", "福建神福州市马航路13号"},
                {"王五", "wangwu@qq.com", "13071634556", "浙江省泉州市天和路21号"},
                {"赵六", "zhaoliu@qq.com", "13071645666", "北京市故公路1号"}
        });
        saveDocument(doc, "addressList.xml", "UTF-8");
    }

    /**
     * 保存XML文件
     * @param doc 文档
     * @param fileName 文件名
     * @param encoding 编码方式
     */
    private static void saveDocument(@NotNull Document doc, String fileName, String encoding){
        //设置输出格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding(encoding);
        format.setNewlines(true);
        //文件路径
        String path = Utils.classPath() + "static" + File.separator + "xml";
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
        //保存XML文件
        try {
            XMLWriter writer = new XMLWriter(new FileOutputStream(new File(path + File.separator + fileName)), format);
            writer.write(doc);
            writer.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    /**
     * 创建一个通讯录
     * @param doc XML文档
     * @param list 通讯录联系人信息列表[{姓名,邮箱,手机号,地址}]
     */
    private static void createAddressList(@NotNull Document doc, String[][] list){
        Element addressList = doc.addElement("addresslist");        //通讯录
        for(String[] e : list){
            if(e != null && e.length >= 4){
                createLinkman(e[0], e[1], e[2], e[3], addressList);
            }
        }
    }

    /**
     * 创建一个联系人信息节点
     * @param name 姓名
     * @param email 邮箱
     * @param phone 手机号
     * @param address 地址
     * @param addressList 通讯录
     */
    private static void createLinkman(String name, String email, String phone, String address, @NotNull Element addressList){
        Element linkman = addressList.addElement("linkman");    //联系人
        Element n = linkman.addElement("name");                 //姓名
        n.setText(name);
        Element e = linkman.addElement("email");                //邮箱
        e.setText(email);
        Element p = linkman.addElement("phone");                //手机号
        p.setText(phone);
        Element a = linkman.addElement("address");              //地址
        a.setText(address);
    }
}

读XML文件

package www.xuefeibai.cn.utils;

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

import javax.validation.constraints.NotNull;
import java.io.File;
import java.util.Iterator;

/**
 * @author xuefeibai
 * @create 2020-02-29 15:59
 */
public class DOM4JReader {

    public static void main(String[] args) {
        read("addressList.xml", "UTF-8");
    }

    /**
     * 读取XML文档
     * @param fileName 文件名
     * @param encoding 编码方式
     */
    private static void read(String fileName, String encoding){
        String path = Utils.classPath() + "static" + File.separator + "xml" + File.separator + fileName;
        File file = new File(path);
        if(!file.exists()){
            System.out.println("file[" + path + "] is not exists.");
            return;
        }
        SAXReader reader = new SAXReader();
        reader.setEncoding(encoding);
        Document doc = null;
        try{
            doc = reader.read(file);
            Element root = doc.getRootElement();
            readAddressList(root);
        }catch (DocumentException e){
            e.printStackTrace();
        }
    }

    /**
     * 读取通讯录
     * @param addressList 通讯录
     */
    private static void readAddressList(@NotNull Element addressList){
        Iterator<Element> i = addressList.elementIterator();
        while(i.hasNext()){
            readLinkman(i.next());
        }
    }

    /**
     * 读取联系人信息
     * @param linkman 联系人信息
     */
    private static void readLinkman(@NotNull Element linkman){
        Iterator<Element> i = linkman.elementIterator();
        while(i.hasNext()){
            Element e = i.next();
            System.out.println(e.getName() + ":" + e.getText());
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值