DOM4J读写XML文件
程序员文章站
2022-05-29 11:37:12
...
加载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[][]{ //创建通讯录
{"张三", "[email protected]", "13071634567", "广东省广州市科韵路11号"},
{"李四", "[email protected]", "13071634698", "福建神福州市马航路13号"},
{"王五", "[email protected]", "13071634556", "浙江省泉州市天和路21号"},
{"赵六", "[email protected]", "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());
}
}
}