### Java对DOM的三种操作方式 在Java编程领域中,处理XML文档是一项常见的任务。XML(可扩展标记语言)作为一种标准的数据交换格式,在多种应用场景中扮演着重要角色。为了简化XML文档的操作,Java提供了多种库和技术支持。其中,DOM、SAX以及Digester是三种非常重要的方法。 #### 1. DOM (Document Object Model) DOM是一种树形结构的标准模型,用于表示XML或HTML文档。它定义了一组对象以及这些对象之间的关系,以便程序员可以通过这些对象来访问、修改或删除文档中的元素。DOM是由W3C(万维网联盟)定义的,因此得到了广泛的采纳和支持。 - **特点**: - 提供了强大的读写能力。 - 可以将整个XML文档加载到内存中,这意味着你可以随时查询文档的任何部分。 - 适用于中小型文档处理,对于大型文档可能会导致内存不足的问题。 - **示例代码**: ```java import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DOMParser { DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // Load and parse XML file into DOM public Document parse(String filePath) throws ParserConfigurationException, SAXException, IOException { DocumentBuilder builder = builderFactory.newDocumentBuilder(); File inputFile = new File(filePath); Document doc = builder.parse(inputFile); // normalize the document structure; this is optional but recommended doc.getDocumentElement().normalize(); return doc; } } ``` #### 2. SAX (Simple API for XML) SAX是一种基于事件驱动的API,它通过顺序地读取XML文档来处理数据,而不是像DOM那样一次性将整个文档加载到内存中。这种处理方式非常适合大型文档的处理,因为它可以显著减少内存使用量。 - **特点**: - 高效且节省资源。 - 适合于只需要处理文档一部分的情况。 - 支持XPath查询,可以轻松地查找和提取特定元素。 - 不适合需要频繁修改文档的情况。 #### 3. Digester Digester是Apache组织提供的一种开源工具,主要用于将XML文档转换为Java Bean对象。它通过配置文件指定如何解析XML文档,并将其映射到相应的Java Bean对象上。 - **特点**: - 非常适合用于简单的XML文档处理。 - 无需编写复杂的解析代码。 - 支持XML到Java Bean的自动转换。 - 对于复杂文档的处理能力较弱。 - **示例XML文档**: ```xml <?xml version="1.0" encoding="UTF-8"?> <books> <book id="001"> <title>Harry Potter</title> <author>JK.Rowling</author> </book> <book id="002"> <title>Learning XML</title> <author>Erik T. Ray</author> </book> </books> ``` ### 总结 DOM、SAX和Digester分别适用于不同的场景。DOM最适合需要频繁访问文档各个部分的场合;SAX则适用于大型文档的处理,特别是只需处理文档的一部分时;而Digester适用于将简单的XML文档快速转换为Java Bean对象的场景。选择哪种技术取决于具体的应用需求和文档大小等因素。
Java 处理 XML 的三种主流技术及介绍
简介: XML (eXtensible Markup Language) 意为可扩展标记语言,它已经是软件开发行业中大多数程序员和厂商用以选择作为数据传输的载体。本文作者对于 Java 处理 XML 的几种主流技术进行一些总结和介绍,希望帮助那些有不同需求的开发人员对于 XML 处理技术的作出最优的选择。
最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容存储和表现分离等等优势注定了该语言从诞生之日起就会走向辉煌。 XML 语言在成为 W3C 标准之后进入到了一个快速发展的时期,当然它本身所具有的一系列优点和优势也注定了各大技术厂商对它的偏爱,Java 作为软件行业的一种开发技术也迅速作出了反应,出现了多种对 XML 支持的工具,本文将会从这个角度对 Java 处理 XML 的几种主流技术进行介绍,希望能对您有所帮助。在这篇文章中,您将会得到以下信息:
Java 提供了哪些优秀的类库及工具便于程序员对 XML 进行处理 ?
有了 DOM 了,其它工具类库还有必要么 ?
几个小例程带你快速了解这三种解析方式
Java 有哪些优秀的类库及工具便于程序员对 XML 进行处理 ?
大名鼎鼎的 DOM
绿色环保的 SAX
默默无闻的 Digester
XML 三种解析方式简介
大名鼎鼎的 DOM
说它大名鼎鼎可是一点不为过,DOM 是 W3C 处理 XML 的标准 API,它是许多其它与 XML 处理相关的标准的基础,不仅是 Java,其它诸如 Javascript,PHP,MS .NET 等等语言都实现了该标准, 成为了应用最为广泛的 XML 处理方式。当然,为了能提供更多更加强大的功能,Java 对于 DOM 直接扩展工具类有很多,比如很多 Java 程序员耳熟能详的 JDOM,DOM4J 等等, 它们基本上属于对 DOM 接口功能的扩充,保留了很多 DOM API 的特性,许多原本的 DOM 程序员甚至都没有任何障碍就熟练掌握了另外两者的使用,直观、易于操作的方式使它深受广大 Java 程序员的喜爱。
绿色环保的 SAX
SAX 的应运而生有它特殊的需要,为什么说它绿色环保呢,这是因为 SAX 使用了最少的系统资源和最快速的解析方式对 XML 处理提供了支持。 但随之而来繁琐的查找方式也给广大程序员带来许多困扰,常常令人头痛不已,同时它对 XPath 查询功能的支持,令人们对它又爱又恨。
默默无闻的 Digester:XML 的 JavaBean 化
Digester 是 apache 基金组织下的一个开源项目,笔者对它的了解源于对 Struts 框架的研究,是否有很多程序员想要一解各大开源框架的设计甚至想要自己写一个功能强大的框架时会碰到这样一个难题: 这些形形色色的用 XML 语言标记的框架配置文件,框架底层是用什么技术来解析呢? DOM 解析耗费时间,SAX 解析又过于繁琐,况且每次解析系统开销也会过大, 于是,大家想到需要用与 XML 结构相对应的 JavaBean 来装载这些信息,由此 Digester 应运而生。它的出现为 XML 转换为 JavaBean 对象的需求带来了方便的操作接口,使得更多的类似需求得到了比较完美的解决方法, 不再需要程序员自己实现此类繁琐的解析程序了。与此同时 SUN 也推出了 XML 和 JavaBean 转换工具类 JAXB,有兴趣的读者可以自行了解。
三种解析方式比较
DOM
优缺点:实现 W3C 标准,有多种编程语言支持这种解析方式,并且这种方法本身操作上简单快捷,十分易于初学者掌握。其处理方式是将 XML 整个作为类似树结构的方式读入内存中以便操作及解析,因此支持应用程序对 XML 数据的内容和结构进行修改,但是同时由于其需要在处理开始时将整个 XML 文件读入到内存中去进行分析,因此其在解析大数据量的 XML 文件时会遇到类似于内存泄露以及程序崩溃的风险,请对这点多加注意。
适用范围:小型 XML 文件解析、需要全解析或者大部分解析 XML、需要修改 XML 树内容以生成自己的对象模型
SAX
SAX 从根本上解决了 DOM 在解析 XML 文档时产生的占用大量资源的问题。其实现是通过类似于流解析的技术,通读整个 XML 文档树,通过事件处理器来响应程序员对于 XML 数据解析的需求。由于其不需要将整个 XML 文档读入内存当中,它对系统资源的节省是十分显而易见的,它在一些需要处理大型 XML 文档以及性能要求较高的场合有起了十分重要的作用。支持 XPath 查询的 SAX 使得开发人员更加灵活,处理起 XML 来更加的得心应手。但是同时,其仍然有一些不足之处也困扰广大的开发人员:首先是它十分复杂的 API 接口令人望而生畏,其次由于其是属于类似流解析的文件扫描方式,因此不支持应用程序对于 XML 树内容结构等的修改,可能会有不便之处。
适用范围:大型 XML 文件解析、只需要部分解析或者只想取得部分 XML 树内容、有 XPath 查询需求、有自己生成特定 XML 树对象模型的需求
Digester/JAXB
优缺点 : 由于其是在上述两者的基础上衍生出来的工具类,为的是满足将 XML 转换为 JavaBean 的特殊需求,故而没有什么特别明显的优缺点。作为大名鼎鼎的开源框架 Struts 的 XML 解析工具 Digester,为我们带来了将 XML 转换为 JavaBean 的可靠方法。
适用范围 : 有将 XML 文档直接转换为 JavaBean 需求。
应用示例
下面给出一段用于解析的 XML 片段:
清单 1. XML 片段
剩余9页未读,继续阅读
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助