XML DOM是将XML文档解析为内存中树形结构的编程接口,支持随机访问和节点增删改查,但因全量加载易致内存溢出。

XML文档对象模型(DOM)是一种将XML文档表示为内存中树形结构的编程接口。它把整个XML文件解析成由节点组成的层次化对象树,每个元素、属性、文本甚至注释都对应一个节点,程序可以通过标准API访问、修改、添加或删除这些节点。
DOM的核心特点:内存驻留与树状结构
DOM解析器会一次性读取整个XML文件,将其完全加载到内存中,并构建一棵完整的节点树。根节点是Document对象,其下依次是元素节点(Element)、属性节点(Attr)、文本节点(Text)等。这种结构支持随机访问——比如可以直接通过getElementsByTagName("book")获取所有book元素,无需顺序遍历。
- 适合需要频繁查询、修改或重排XML内容的场景
- 不适用于超大XML文件,因全部内容驻留内存,可能引发OOM(内存溢出)
- 节点间存在明确的父子、兄弟关系,便于导航(如
parentNode、childNodes、nextSibling)
常见DOM节点类型与关系
DOM树不是只有标签元素。一个简单的在DOM中至少包含三个节点:
- 一个Element节点(title)
- 一个Attr节点(lang="zh"),作为该元素的属性挂载
- 一个Text节点("XML入门"),作为title元素的子节点
注意:换行和缩进在默认解析下也可能生成Text节点,这常导致childNodes.length比预期多,实际开发中建议用element.children(只返回元素子节点)来规避。
DOM解析过程简述
当调用DocumentBuilder.parse()(Java)或DOMParser.parseFromString()(JavaScript)时,解析器执行以下动作:
- 词法分析:将XML字符串拆分为标签、属性、文本等标记(tokens)
- 语法分析:按XML语法规则验证结构,并构建节点对象
- 树组装:根据嵌套关系建立节点间的父-子、前-后链接,最终形成可操作的Document对象
这个过程是同步阻塞的,解析完成前程序无法继续执行后续逻辑。
基本上就这些。DOM本质是用通用树结构映射XML语法结构,方便代码以面向对象方式处理数据,但代价是内存开销和启动延迟。










