XML即可扩展标记语言,它通过自定义标签来存储结构化数据,具有良好的可读性和跨平台特性,常被用于配置文件、数据接口传输等场景。掌握XML的读取和写入是开发中的基础技能,下面会结合具体工具和代码示例展开说明。

XML基础结构说明
一个标准的XML文件通常包含声明、根元素、子元素和属性,以下是一个简单的XML示例结构:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1">
<name>张三</name>
<age>25</age>
</user>
<user id="2">
<name>李四</name>
<age>28</age>
</user>
</users>
其中<?xml version="1.0" encoding="UTF-8"?>是XML声明,指定版本和编码;<users>是根元素,所有其他元素都包含在根元素内部;<user>是子元素,id是元素的属性;<name>和<age>是<user>的子元素,存储具体数据内容。
使用dom4j实现XML读取
dom4j是一款常用的XML解析工具,功能完善且使用简单,首先需要在项目中引入dom4j的依赖,如果是Maven项目可以添加以下依赖配置:
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
读取XML文件的核心步骤如下:
- 创建SAXReader对象,用于读取XML文件
- 调用read方法加载XML文件,得到Document对象
- 通过Document对象获取根元素
- 遍历根元素的子元素,获取对应的属性和文本内容
以下是完整的读取代码示例:
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class XmlReadDemo {
public static void main(String[] args) {
// 创建SAXReader对象
SAXReader reader = new SAXReader();
try {
// 加载XML文件,得到Document对象
Document document = reader.read(new File("users.xml"));
// 获取根元素
Element rootElement = document.getRootElement();
// 获取所有user子元素
List<Element> userElements = rootElement.elements("user");
// 遍历user元素
for (Element userElement : userElements) {
// 获取id属性
String id = userElement.attributeValue("id");
// 获取name子元素的文本
String name = userElement.elementText("name");
// 获取age子元素的文本
String age = userElement.elementText("age");
System.out.println("用户ID:" + id + ",姓名:" + name + ",年龄:" + age);
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
使用dom4j实现XML写入
XML写入的核心是先构建Document对象,添加对应的元素和属性,最后将Document对象输出到文件中,具体步骤如下:
- 创建DocumentHelper对象,创建Document和根元素
- 向根元素中添加子元素、属性、文本内容
- 创建XMLWriter对象,指定输出路径和编码格式
- 调用write方法将Document写入文件
以下是完整的写入代码示例:
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.FileOutputStream;
import java.io.IOException;
public class XmlWriteDemo {
public static void main(String[] args) {
// 创建Document对象
Document document = DocumentHelper.createDocument();
// 创建根元素users
Element rootElement = document.addElement("users");
// 添加第一个user元素
Element user1 = rootElement.addElement("user");
// 添加id属性
user1.addAttribute("id", "1");
// 添加name子元素
user1.addElement("name").setText("张三");
// 添加age子元素
user1.addElement("age").setText("25");
// 添加第二个user元素
Element user2 = rootElement.addElement("user");
user2.addAttribute("id", "2");
user2.addElement("name").setText("李四");
user2.addElement("age").setText("28");
// 创建输出格式,设置缩进和编码
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
try {
// 创建XMLWriter,指定输出文件和格式
XMLWriter writer = new XMLWriter(new FileOutputStream("new_users.xml"), format);
// 写入Document
writer.write(document);
// 关闭流
writer.close();
System.out.println("XML文件写入成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
操作注意事项
在进行XML读取和写入时,需要注意以下几点:
- 读取XML文件时要确保文件路径正确,否则会抛出文件找不到的异常
- 写入XML时要指定正确的编码格式,避免出现中文乱码问题
- 如果XML结构比较复杂,遍历元素时要注意判断元素是否存在,避免空指针异常
- 操作完成后要及时关闭相关的IO流,释放系统资源
除了dom4j之外,Java原生的DOM、SAX解析方式也可以实现XML的读取和写入,不过dom4j的API更加简洁,开发效率更高,适合大多数基础场景的使用。