Java DOM解析XML的核心是将整个文档加载进内存构建树状结构,通过API遍历、查询、修改节点;适合中小型文件,但内存占用高且不支持流式处理。

Java DOM解析XML,核心是把整个XML文档加载进内存,构建成一棵树状结构,然后通过标准API遍历、查询、修改节点。它适合中小型XML文件,操作直观,但内存占用高、不支持流式处理。
DOM解析的基本步骤
使用Java内置的javax.xml.parsers.DocumentBuilder和DocumentBuilderFactory完成解析:
- 创建DocumentBuilderFactory实例(线程不安全,建议每次新建或复用时注意同步)
- 通过工厂获取DocumentBuilder
- 调用parse()方法加载XML(支持File、InputStream、URL等输入源)
- 得到Document对象,即整棵DOM树的根节点
常用节点类型与操作方式
DOM中所有元素都继承自Node接口。关键子接口包括:
- Element:代表一个XML标签,可用getElementsByTagName()、getAttribute()、getTagName()等方法操作
- Attr:表示属性节点,通常通过Element#getAttributeNode()或直接用getAttribute()获取值
- Text:文本内容节点,需调用getNodeValue()或getTextContent()(后者会自动合并相邻Text节点)
- Document:顶层节点,也是Node的子类,提供创建新节点(如createElement)、导入节点等能力
读取XML示例(带错误处理)
以下代码读取并提取信息:
立即学习“Java免费学习笔记(深入)”;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("book.xml"));
// 获取所有book元素
NodeList bookList = doc.getElementsByTagName("book");
for (int i = 0; i < bookList.getLength(); i++) {
Element book = (Element) bookList.item(i);
String id = book.getAttribute("id"); // 获取属性
String title = book.getElementsByTagName("title").item(0)
.getTextContent(); // 获取子元素文本
System.out.println("ID: " + id + ", Title: " + title);
}
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
创建和修改XML文档
DOM不仅可读,还能动态构建和更新XML:
- 用Document#createElement()创建新元素,createTextNode()创建文本节点
- 用Node#appendChild()或insertBefore()组织父子关系
- 修改属性用Element#setAttribute(),修改文本内容用setTextContent()
- 保存到文件需借助TransformerFactory(JAXP的一部分),将Document转为Source再写入Result










