在Java开发中,将XML数据转换为org.w3c.dom.Document对象是处理XML内容的基础操作,Document对象可以让我们方便地遍历、修改XML的节点结构,适用于各类XML数据解析场景。

核心依赖类说明
Java标准库提供了处理XML DOM解析的相关类,主要位于javax.xml.parsers和org.w3c.dom包下,核心类的作用如下:
DocumentBuilderFactory:用于创建DocumentBuilder实例的工厂类DocumentBuilder:负责解析XML数据并生成Document对象的解析器Document:代表整个XML文档的DOM树根节点
从XML字符串转换的实现
当XML数据以字符串形式存在时,我们可以通过以下步骤将其转换为Document对象:
实现步骤
- 创建DocumentBuilderFactory实例
- 通过工厂获取DocumentBuilder实例
- 将XML字符串转换为输入流,调用DocumentBuilder的parse方法解析
代码示例
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
public class XmlToDocumentDemo {
public static void main(String[] args) {
// 待转换的XML字符串
String xmlStr = "<?xml version="1.0" encoding="UTF-8"?><user><name>张三</name><age>25</age></user>";
try {
// 1. 创建DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2. 获取DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
// 3. 将字符串转为输入流并解析
ByteArrayInputStream inputStream = new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8));
Document document = builder.parse(inputStream);
// 输出文档根节点名称验证结果
System.out.println("根节点名称:" + document.getDocumentElement().getNodeName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
从XML文件转换的实现
如果XML数据存储在本地文件中,转换逻辑和字符串转换类似,只需要将输入流替换为文件输入流即可:
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
public class XmlFileToDocumentDemo {
public static void main(String[] args) {
// XML文件路径
File xmlFile = new File("test.xml");
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// 直接解析文件
Document document = builder.parse(xmlFile);
System.out.println("根节点名称:" + document.getDocumentElement().getNodeName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意事项
- 解析XML时可能会抛出ParserConfigurationException、SAXException、IOException等异常,需要做好异常捕获处理
- 如果XML包含特殊字符,需要确保输入流的编码和XML声明的编码一致,避免出现乱码
- 生产环境中如果需要处理不可信的XML数据,建议关闭DocumentBuilderFactory的外部实体解析功能,防止XXE攻击
关闭外部实体解析的示例代码片段:factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
常见问题解答
解析时提示编码错误怎么办
首先检查XML字符串或文件的编码是否和代码中使用的编码一致,比如XML声明是UTF-8,那么转换字节数组时也要使用UTF-8编码。
如何获取Document中的节点内容
可以通过Document的getElementsByTagName方法获取指定标签名的节点列表,再通过节点的getTextContent方法获取节点文本内容。
JavaXMLorg.w3c.dom.DocumentDocumentBuilder修改时间:2026-07-03 13:30:20