Java中DOM Level 3是做什么的

DOM Level 3是面向XML处理的增强标准,新增Core、Load and Save、Validation三大模块;其中Core支持XML元信息控制与空文档构建,Load and Save实现XML解析与序列化(含格式选项),Validation提供Schema/DTD校验接口;Java需通过DOMImplementationRegistry显式获取LS实现才能使用。

Java中DOM Level 3主要解决XML文档的加载、保存、验证和信息集控制问题,它不是用来操作HTML页面的(那是HTML DOM的事),而是面向XML处理的增强标准。

它在DOM Level 2基础上新增了三个关键模块,其中两个被主流Java解析器实际支持:

DOM Level 3 Core(核心扩展)

提供对XML文档元信息的精细控制能力,比如:

  • getXmlVersion():获取XML声明中的version(如"1.0")
  • getXmlEncoding():读取encoding属性(如"UTF-8")
  • getXmlStandalone():判断是否为standalone="yes/no"
  • 引入bootstrapping机制,让解析器能从空文档开始构建结构,支持动态生成XML

DOM Level 3 Load and Save(加载与保存)

这是Java里最常被用到的部分,用于:

  • 把XML字符串或输入流解析成Document对象DOMImplementationLS.load()
  • 把内存中的Document对象序列化回XML文件或字符串LSSerializer.write()
  • 支持设置缩进、编码、是否省略XML声明等输出格式选项

例如,用Java把test1.xml读进来、修改后写入test2.xml,并带Schema验证,就依赖这个模块。

DOM Level 3 Validation(验证)

定义了基于DTD或XML Schema校验文档合法性的接口,如:

  • Document.normalizeDocument() 可触发验证
  • Element.getSchemaTypeInfo() 获取类型信息
    但现实中多数Java XML解析器(如Xerces)虽部分支持,却不完全实现该模块;开发中更常用SAX或StAX配合Schema进行校验。

注意:Java自带的javax.xml.parsers.DocumentBuilder默认只支持Level 2;要使用Level 3功能,需显式获取DOMImplementationRegistry,加载支持LS(Load/Save)的实现,比如:

DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();
DOMImplementationLS impl = (DOMImplementationLS) registry.getDOMImplementation("LS");

不复杂但容易忽略——Level 3的价值不在“新功能多”,而在于让XML处理真正具备可逆性(读→改→写不丢格式/声明)和可验证性(结构+语义双保障)。