JDOM 是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序。它的设计包含 Java 语言的语法乃至语义。但是它是否比现有的 -- 更标准的 -- XML APL 好呢?当我们看过一些示例并说明这个流行的开放源代码项目的设计目标后,您自己来判断吧。最近这个开放源代码项目已被正式接受成为 Java 规范要求。
作为开发人员,您可能听说过 80-20 规则,在其它领域被称为 Pareto 法则:一种过程或方法能适应所有可能情况的 80%,另外的 20% 则需要根据具体情况来处理。软件开发的必然结果是:对于开发人员而言,有了给定的技术后就能非常容易地完成可能要做的工作的 80%。
当然,软件产品和标准并不总是根据 80-20 规则发展的。特别的,Java XML 的缺陷就是这条规则的一个例外。Java 的编程世界拥有很多的 API -- 一些是自己开发的,一些是由几个大公司开发并被制定为标准的 -- 他们提供了解决特殊 XML 任务的成熟解决方案。作为 XML 普遍性的证明,每个新任务都存在着一种新技术,但如何将它们结合在一起,又如何寻找一种合适的工具去完成必须重复做的任务中的 80% -- 利用 Java 语言的直观映象的基本 XML 树操作?JDOM 正好是用来解决上述问题的一个 XML API。
标记:Java 和 XML
在许多方面,Java 语言已变成供 XML 选择的一种编程语言。由于 Apache 软件基金会和 IBM alphaWorks 所做的开创性工作,现在已有完整的工具链用于创建,操作,传送文档和对 XML 文档进行语法分析。
但是,虽然许多 Java 开发人员每天都在使用 XML,Sun 却在将 XML 整合进 Java 平台方面落后了。因为在 XML 成为从商家对商家集成到 Web 站点内容流水化等方面的关键技术之前,Java 2 平台就已经非常流行了。Sun 已经使用 JSR 过程使之成为现存 XML API 的鼻祖,这一点已被广泛接受。目前最显著的是加入了 JAXP (用于 XML 语法分析的 Java API),其中包含了三个软件包:
org.w3c.dom ,W3C 推荐的用于 XML 标准规划文档对象模型的 Java 工具
org.xml.sax ,用于对 XML 进行语法分析的事件驱动的简单 API
javax.xml.parsers ,工厂化工具,允许应用程序开发人员获得并配置特殊的语法分析器工具
尽管对于 Java 开发人员而言,有了这些软件包是件好事,但它仅仅代表获得了现有 API 标准的正式许可而已,并没有在提供一流的 Java-XML 互操作性方面取得了巨大飞跃。核心 Java 平台所缺乏的是将 XML 文档作为 Java 对象操作的直观接口。
进入 JDOM。JDOM 是两位著名的 Java 开发人员兼作者,Brett Mclaughlin 和 Jason Hunter 的创作成果, 2000 年初在类似于 Apache 协议的许可下,JDOM 作为一个开放源代码项目正式开始研发,JDOM 作为一个开放源代码项目正式开始了。它已成长为包含来自广泛的 Java 开发人员的投稿、集中反馈及错误修复的系统,并致力于建立一个完整的基于 Java 平台的解决方案,通过 Java 代码来访问、操作并输出 XML 数据。
回页首
这是 JDOM 适合的 API、哑元
JDOM 能够替换 org.w3c.dom 软件包来有计划地操作 XML 文档。它并不是一个简单的替代品,实际上 JDOM 和 DOM 能够愉快地并存。另外,尽管它提供的类的封装从配置和运行分析器执行中分担了大量工作,但它不负责根据文本输入来对 XML 进行语法分析。JDOM 建立在现有的 API 的能力之上,正如项目网页所表述的“一个更好的捕鼠器”。
要理解需要备用 API 的原因,就要考虑 W3C DOM 设计的局限性:
语言独立。DOM 并不是用人们心目中的 Java 语言设计的。虽然这种方法保留了在不同语言中非常相似的 API,它也使那些习惯 Java 语言的程序员感到更麻烦。例如:Java 语言内建了一种 String 类,而 DOM 则规范定义了自己的 Text 类。
严格的层次结构。DOM API 直接沿袭了 XML 规范。在 XML 中,每件东西都是一个结点,因此您能在 DOM 中找到一个几乎每件东西都可以扩展的基于 Node 的接口和返回 Node 的一系列方法。就多态性的观点来讲,它是优秀的,但鉴于如上解释,它在 Java 语言中的应用是困难而且不便的,其中从 Node 向叶类型作显式下拉会导致代码的冗长和难以理解。
接口驱动。公共 DOM API 仅由接口组成( Exception 类是一个例外,但恰恰足够了)。w3c 对提供实现并不感兴趣,它只对定义接口(比较有意义)感兴趣。但它也意味着作为 Java 程序员使用 API 在创建 XML 对象时增加了分散程度,因为 w3c 标准大量使用工厂化的类和类似的灵活的但不直接的模式。在某些应用中,XML 文档是仅由语法分析器建立的,而从不会由应用程序级代码建立,这是不相关的。但是,随着 XML 更广泛的使用,并不是所有问题都继续需要由语法分析器来驱动。应用程序的开发人员需要一个更方便的方法有计划地构造 XML 对象。
对于程序员,这些约束意味着庞大(在内存占用和接口大小方面)的和难掌握的 API,学习和使用都很难。相反,JDOM 是作为一种轻量级 API 被制定的,最主要的是它是以 Java 为中心的。它在遵循 DOM 主要规则的基础上除去了上述缺点:
JDOM 是 Java 平台专用的。只要有可能,API 都使用 Java 语言的内建 String 支持,因此文本值也适用于 String 。它还可利用 Java 2 平台的类集,如 List 和 Iterator ,给程序员提供了一个丰富的并且和 Java 语言类似的环境。
没有层次性。在 JDOM 中,XML 元素就是 Element 的实例,XML 属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。由于在 XML 中所有这些都代表了不同的概念,因此它们总是作为自己的类型被引用,而不是作为一个含糊的“结点”。
类驱动。因为 JDOM 对象就是像 Document 、 Element 和 Attribute 这些类的直接实例,因此创建一个新 JDOM 对象就如在 Java 语言中使用 new 操作符一样容易。它还意味着不需要进行工厂化接口配置 -- JDOM 的使用是直截了当的。
回页首
看,没有 Node :建立和操作 JDOM 文档
JDOM 使用标准的 Java 编码模式。只要有可能,它使用 Java new 操作符而不用复杂的工厂化模式,使对象操作即便对于初学用户也很方便。例如,让我们看一下如何随便使用 JDOM 建立一个简单的 XML 文档。我们将要建立的结构如清单 1 所示。(从 参考资料上可下载关于本文的完整代码)
清单 1. 建立 XML 文档样本
<?xml version="1.0" encoding="UTF-8"?>
<car vin="123fhg5869705iop90">
<!--Description of a car-->
<make>Toyota</make>
<model>Celica</model>
<year>1997</year>
<color>green</color>
<license state="CA">1ABC234</license>
</car>
注意:我们将建立 示例文档,在下面的清单 2 到清单 7 中有详细描述。
开始,让我们先创建一个根元素,并将其添加到文档中:
清单 2. 创建一个 Document
Element carElement = new Element("car");
Document myDocument = new Document(carElement);
这一步创建一个新 org.jdom.Element ,并将其作为 org.jdom.Document myDocument 的根元素。(如果您使用 参考资料中提供的样本代码,请务必导入 org.jdom.* 。)因为一个 XML 文档必须一直有一个唯一的根元素,所以 Document 将 Element 放在它的构造器中。
下一步,添加 vin 属性:
清单 3. 添加一个 Attribute
carElement.addAttribute(new Attribute("vin", "123fhg5869705iop90"));
添加元素也是很简单的。这里我们添加 make 元素:
清单 4. 元素和子元素
Element make = new Element("make");
make.addContent("Toyota");
carElement.addContent(make);
由于 Element 的 addContent 方法返回 Element ,我们也可以这样写:
清单 5. 用简洁形式添加元素
carElement.addContent(new Element("make").addContent("Toyota"));
这两个语句完成了相同的工作。有些人认为第一个示例可读性更好,但是如果您一次建立许多元素,您会觉得第二个示例可读性更好。要完成构建文档:
清单 6. 添加其余的元素
carElement.addContent(new Element("model").addContent("Celica"));
carElement.addContent(new Element("year").addContent("1997"));
carElement.addContent(new Element("color").addContent("green"));
carElement.addContent(new Element("license")
.addContent("1ABC234").addAttribute("state", "CA"));
您会注意到对于 license 元素,我们不但添加了元素的内容,还为其添加了一个属性,表明许可已被发出了这个状态。这是因为 Element 的 addContent 方法总是返回 Element 本身,而不是一个无效的声明。
用同样的方法添加注释部分或其它标准 XML 类型:
清单 7. 添加一条注释
carElement.addContent(new Comment("Description of a car"));
操作文档也是用类似方式。例如,要引用 year 元素,我们使用 Element 的 getChild 方法:
清单 8. 访问子元素
Element yearElement = carElement.getChild("year");
该语句实际上将返回第一个元素名为 year 的子 Element 。 如果没有 year 元素,则调用返回一个空值。注意,我们不必回溯来自任何类似于 DOM Node 接口的返回值 -- Element 的子元素就是 Element 。用类似的方式,我们可把 year 元素从文档中除去:
清单 9. 除去子元素
boolean removed = carElement.removeChild("year");
这次调用将只除去 year 元素;文档的其余部分保持不变。
到目前为止,我们已经涵盖了文档的生成和操作。要将完成的文档输出至控制台,可使用 JDOM 的 XMLOutputter 类:
清单 10. 将 JDOM 转化为 XML 文本
try {
XMLOutputter outputter = new XMLOutputter(" ", true);
outputter.output(myDocument, System.out);
} catch (java.io.IOException e) {
e.printStackTrace();
}
XMLOutputter 有几个格式选项。这里我们已指定希望子元素从父元素缩进两个空格,并且希望元素间有空行。 XMLOutputter 可输出到 Writer 或 OutputStream 。为输出到文件,我们可以简单地将输出行简化为:
清单 11. 使用 FileWriter 输出 XML
FileWriter writer = new FileWriter("/some/directory/myFile.xml");
outputter.output(myDocument, writer);
writer.close();
分享到:
相关推荐
JDOM,全称为Java Document Object Model,是一种专为Java开发者设计的XML处理库,旨在简化XML编程,提高开发效率。JDOM的出现是为了应对Java XML生态中存在多种API,但缺乏一个直观且易于使用的Java友好型接口的...
"用 JDOM 简化 XML 编程"可能讲述了JDOM,这是另一个Java XML API,提供了更加面向对象的接口来处理XML,使编程更加直观。 最后,"2011版清华IT课程总表.xls"虽然不是直接与XML相关的文件,但它表明XML技术也可以...
其设计理念在于简化XML编程,让开发者能够专注于应用程序的核心逻辑,而不是XML解析的底层细节。通过JDOM,可以方便地实现XML文件的读取、修改和写入,为Java应用程序处理XML数据提供了强大支持。
通过使用JDOM,开发者可以避免直接处理底层的DOM(Document Object Model)或SAX(Simple API for XML)解析器,从而简化XML编程。 在JDOM 1.0中,主要的类和接口包括: 1. **`Element`**: 这是XML文档中元素的...
总的来说,JDOM是Java开发人员处理XML文档的有力工具,它通过其精心设计的API和高效的数据结构,简化了XML的解析、操作和生成过程,使得XML编程在Java环境中变得更加便捷。无论是构建新的XML文档,还是从现有XML源...
在实际开发中,结合具体的业务需求,灵活运用JDOM可以大大简化XML相关的编程任务。如果你想要进一步提升技能,可以尝试研究更多复杂的XML操作,如XPath查询和XSLT转换,这些都是JDOM支持的功能。
JDOM 的设计目标是简化 XML 处理,对比于传统的 SAX 和 DOM 解析器,它具有更友好的编程模型。 在早期版本的 JDOM 中,可能存在编译错误和中文乱码问题。例如,原文提到的作者在使用旧版 JDOM 时遇到这些问题,但...
本文将深入探讨JDOM.jar在XML处理中的核心概念、使用方法以及它如何简化XML操作。 一、JDOM概述 JDOM是专为Java设计的一个DOM(Document Object Model)实现,提供了全面的API来创建、修改和解析XML文档。相比其他...
Java XML编程指南主要涵盖了在Java平台上使用XML技术进行开发的各种概念和实践方法。XML(Extensible Markup Language)是一种用于标记数据的语言,它被广泛应用于数据交换、配置存储以及Web服务等场景。Java作为...
本资料“XML编程技术大全”将全面涵盖XML的基本概念、语法、解析方式以及相关的编程实践。 首先,让我们深入理解XML的基础知识。XML文档由元素构成,元素是XML的最基本单位,用于描述文档结构。每个元素都有开始...
4. **JDOM(Java Document Object Model)**:JDOM是一个纯Java的DOM实现,提供了对XML的更直接的处理,比标准DOM更易于使用,但性能稍逊。 5. **DOM4J**:DOM4J是另一个流行的Java XML库,它提供了丰富的功能,...
本文将深入探讨如何使用JDOM库来生成XML文档,这是一种纯Java的API,设计用于简化XML处理。 JDOM是一个开源项目,它的全称是Java Document Object Model,它为Java程序员提供了一个方便的方式来创建和操作XML文档。...
JDOM 1.1是该库的一个稳定版本,自JDOM 1.0发布以来,它在功能和性能上都进行了改进,旨在简化XML编程,提高开发效率。 XML(eXtensible Markup Language)是一种用于标记数据的标准格式,广泛应用于网络通信、数据...
**JAVA版XML编程详解** XML(Extensible Markup Language),可扩展标记语言,是网络数据交换的重要格式,尤其在Java编程中扮演着不可或缺的角色。本PPT专为清华IT培训中心的课程设计,旨在深入讲解XML的基本概念、...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,广泛应用于Web应用程序、数据交换和配置文件等领域。...理解这些解析方式对于XML编程至关重要,希望本文能对初学者有所帮助。
同时,也可以考虑其他解析库,如StAX(Streaming API for XML),它提供了介于DOM和SAX之间的折衷方案,允许以流式的方式处理XML,既减少了内存消耗,又简化了编程模型。 在处理XML文档时,除了解析方式,还需要...
本文将深入探讨Java中的XML编程,主要涉及以下几个核心知识点: 1. **DOM解析**:DOM(Document Object Model)是XML文档的一种树形表示方式,Java中的`javax.xml.parsers.DocumentBuilderFactory`和`...
在Java技术中,XML编程是不可或缺的一部分,它允许开发者在Java应用程序中处理XML文档,实现数据的读取、写入和解析。本部分我们将深入探讨Java与XML的结合使用,以及如何通过Java技术进行XML编程。 1. **Java中的...
本指南将深入探讨Java XML编程的关键知识点,帮助初学者更好地理解和应用这两者之间的融合。 1. **DOM解析**:DOM(文档对象模型)是Java处理XML的一种方式,它将整个XML文档加载到内存中,形成一棵树形结构。通过...