有了 DOM 类厂之后,就可以获得 DocumentBuilder 实例。 DocumentBuilder 实例可以使用的方法与 SAX 的非常类似。主要差异是 parse() 的变种不需要 HandlerBase 类的实例。
它们返回表示语法分析之后的 XML 文档的 DOM Document 实例。另一唯一不同之处是:为类似于 SAX 的功能提供了两个方法:用 SAX ErrorHandler 实现来处理语法分析时可能出现的问题的 setErrorHandler() ,和用 SAX EntityResolver 实现来处理实体解析的 setEntityResolver() 。
如果不熟悉这些概念,则需要通过联机或在我的书中学习 SAX。以下清单显示使用这些方法的示例。
//获得一个 DocumentBuilder 实例
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//查看是否支持 Validate 选项
boolean isValidating = builder.isValidating();
//查看是否支持 namespace 选项
boolean isNamespaceAware = builder.isNamespaceAware();
// 设置一个 SAX ErrorHandler
builder.setErrorHandler(myErrorHandlerImpl);
// 设置一个 SAX EntityResolver
builder.setEntityResolver(myEntityResolverImpl);
// 运用多种方法对 file 进行语法分析
Document doc = builder.parse(new File(args[0]));
// 运用 SAX InputSource
Document doc = builder.parse(mySaxInputSource);
// 运用 InputStream
Document doc = builder.parse(myInputStream, myHandlerBaseInstance);
// 运用 URI
Document doc = builder.parse("http://www.newInstance.com/xml/doc.xml");
是不是感到 DOM 这一节有些令人厌烦?有这种想法的不止您一个,写 DOM 代码有些令人厌烦是因为它是直接取得所学的 SAX 知识,然后将其用于 DOM。因此,和朋友、同事打赌吧,说使用 JAXP 只是小菜一碟。