下面我将为你详细介绍几种最主流和推荐的方法。

准备工作:一个示例 XML
为了方便演示,我们先定义一个简单的 XML 文件 data.xml:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="FICTION">
<title lang="en">The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
<year>1925</year>
<price>10.99</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
使用标准 Java API (DOM - Document Object Model)
这是最传统、最基础的方法,不需要引入任何第三方库,它通过将整个 XML 文件加载到内存中构建一个树形结构,然后遍历这个树来生成字符串。
步骤:
- 创建一个
DocumentBuilderFactory和DocumentBuilder。 - 使用
DocumentBuilder解析 XML 文件,得到Document对象。 - 创建一个
TransformerFactory和Transformer。 - 设置
Transformer的输出属性(如是否缩进、编码等)。 - 使用
Transformer将Document对象转换为String。
代码示例:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import java.io.StringWriter;
public class DomToStringConverter {
public static void main(String[] args) {
try {
// 1. 创建 DocumentBuilderFactory 和 DocumentBuilder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// 2. 解析 XML 文件,获取 Document 对象
// 假设 data.xml 在 classpath 根目录下
Document document = builder.parse(DomToStringConverter.class.getClassLoader().getResourceAsStream("data.xml"));
// 3. 创建 TransformerFactory 和 Transformer
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// 4. 设置输出格式(可选)
// - indent: 是否缩进,使 XML 字符串更易读
// - encoding: 指定输出编码,如 "UTF-8"
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); // 缩进2个空格
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// 5. 将 Document 转换为 String
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(document), new StreamResult(writer));
String xmlString = writer.toString();
System.out.println(xmlString);
} catch (Exception e) {
e.printStackTrace();
}
}
}
优点:
- 是 Java 标准库的一部分,无需额外依赖。
- 功能强大,可以对 XML 进行任意复杂的查询和修改。
缺点:

- 对于大型 XML 文件,会将整个文档加载到内存中,可能导致内存溢出。
- API 相对繁琐,代码量较多。
使用 JDOM (推荐)
JDOM 是一个专门为 Java 设计的 XML API,它旨在让 XML 处理更简单、更直观,它不是标准库,但非常流行。
步骤:
- 添加 JDOM 依赖(Maven)。
- 使用
SAXBuilder解析 XML 文件,得到Document对象。 - 使用
XMLOutputter将Document对象格式化为字符串。
添加 Maven 依赖
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.6.1</version> <!-- 使用最新版本 -->
</dependency>
代码示例
import org.jdom2.Document;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
public class JdomToStringConverter {
public static void main(String[] args) {
try {
// 1. 创建 SAXBuilder
SAXBuilder saxBuilder = new SAXBuilder();
// 2. 解析 XML 文件,获取 Document 对象
// 假设 data.xml 在项目根目录
Document document = saxBuilder.build(new File("data.xml"));
// 3. 创建 XMLOutputter 并设置格式
// - Format.getPrettyFormat(): 生成格式化、易读的字符串
// - Format.getRawFormat(): 生成紧凑的、无缩进的字符串
XMLOutputter xmlOutputter = new XMLOutputter(Format.getPrettyFormat());
// 4. 将 Document 转换为 String
StringWriter writer = new StringWriter();
xmlOutputter.output(document, writer);
String xmlString = writer.toString();
System.out.println(xmlString);
} catch (JDOMException | IOException e) {
e.printStackTrace();
}
}
}
优点:
- API 非常简洁、易用,代码可读性高。
- 内存效率比标准 DOM 好一些。
缺点:
- 需要引入第三方库。
使用 Dom4J (推荐)
Dom4J 是另一个非常强大和流行的 Java XML 库,性能优异,功能强大,尤其在处理大型 XML 文件时表现良好。

步骤:
- 添加 Dom4J 依赖(Maven)。
- 使用
SAXReader解析 XML 文件,得到Document对象。 - 使用
XMLWriter将Document对象写入StringWriter。
添加 Maven 依赖
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.4</version> <!-- 使用最新版本 -->
</dependency>
注意: Dom4J 依赖于另一个库 jaxen 来处理 XPath,Maven 会自动下载它。
代码示例
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
public class Dom4jToStringConverter {
public static void main(String[] args) {
try {
// 1. 创建 SAXReader
SAXReader reader = new SAXReader();
// 2. 解析 XML 文件,获取 Document 对象
// 假设 data.xml 在项目根目录
Document document = reader.read(new File("data.xml"));
// 3. 创建输出格式
// - OutputFormat.createPrettyPrint(): 生成格式化、易读的字符串
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); // 设置编码
// 4. 创建 XMLWriter 和 StringWriter
StringWriter writer = new StringWriter();
XMLWriter xmlWriter = new XMLWriter(writer, format);
// 5. 将 Document 写入 StringWriter
xmlWriter.write(document);
xmlWriter.close();
String xmlString = writer.toString();
System.out.println(xmlString);
} catch (DocumentException | IOException e) {
e.printStackTrace();
}
}
}
优点:
- 性能非常高,尤其适合处理大型 XML 文件。
- API 功能强大,支持 XPath、XSLT 等。
- 代码也比较简洁。
缺点:
- 需要引入第三方库。
总结与选择
| 特性 | 标准 DOM | JDOM | Dom4J |
|---|---|---|---|
| 依赖 | 无(Java标准库) | 第三方 (JDOM2) | 第三方 (Dom4J) |
| 易用性 | 较低,API繁琐 | 高,API直观 | 高,API强大 |
| 性能 | 较低,内存占用大 | 中等 | 高,性能优异 |
| 适用场景 | 小型XML、无外部依赖项目 | 快速开发、中小型XML | 大型XML、高性能需求、复杂操作 |
如何选择?
- 如果你不能引入任何外部库:只能使用标准 DOM,但要记住它可能不适合大文件。
- 如果你想要一个简单、快速、易用的解决方案:JDOM 是一个绝佳的选择,它的 API 非常符合 Java 开发者的习惯。
- 如果你处理的是大型 XML 文件,或者需要极致的性能和强大的功能(如 XPath):Dom4J 是业界公认的最佳选择之一。
对于大多数现代 Java 项目,我 强烈推荐 JDOM 或 Dom4J,它们能显著简化你的代码并提高开发效率。
