帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
Java 版本的 XML API
作者:未知 发布时间:2005-03-12 来源:JSP天空网
Java 和 XML 的组合,是 21 世纪软件开发人员的圣杯。没有任何程序语言比 Java 更具吸引力,而 XML 提供了绝佳的资料表达方式,Java 和 XML 个别来看都是很有用的工具,而两者结合起来的威力更是让程序员兴奋地逢人就说。但是,在尝试着将 Java 和 XML 结合起来用到自己的工作上时,这些程序员又很容易就不知所措。

在本篇文章中,我们将告诉你,为什么对 Java 程序员来说 XML 使用上不如预期的容易,我们也会告诉你,最近有哪些关于 Java 和 XML 上的支持出现,使得这一切变简单了。

难道 XML 是 eXpert Markup Language(给专家使用的标记语言)?
基于对 XML 的兴奋与爱恋,Java 程序员往往迫不及待就到 W3C 的网站上阅读 XML 规格书。在他们浏览 XML 规格书的时候,计算机上同时执行着 Java 程序编辑软件,因为他们准备马上敲进一些东西试试看,然后,很快地,XML 复杂的语法以及晦涩的观念却让他们的心头涌上一阵恐慌。XML 根本不如他们所预期的简单。

XML 规格绝对不是一般 Java 程序员习惯看的格式!所以他们等待,希望藉由更多 XML 新语法和新规格(XSL、XML namespaces、Xpath... 等)的发展可以使得它更简单。他们等待 Java 的 XML API。

API 的演进
一些程序员设计出一些符合 XML 规格的 API,用来帮助他们同伴使用 XML。他们辛苦的初期成果是 SAX 和 DOM。

SAX
SAX 的全名是 Simple API for XML。SAX 是由一个名为 XML-dev 的 mailing list 所发展出来的(XML-dev 是一群志同道合的 XML 高手所组成),SAX 可将 XML 文件用循序的方式列出,SAX 也定义了剖析 XML 文件会发生的许多事件,比方说:element 开始、element 结束、出现字符数据、DTD 定义 entity...... 等。事件发生时,SAX 剖析程序会呼叫对应的 callback method。程序员可以自行定义这些 callback method 的内容,以对此事件做出适当的反应,并允许程序使用这些 XML 的资料。程序员从 David Megginson 的网站下载 API 回来就可以开始写 SAX 程序了,他们也就很快地将 XML 用到日常工作上。

然而,这还不够。虽然 SAX 执行起来很快(因为 SAX 不需要将整个 XML 文件同时放在内存),但是却也无法修改 XML 资料,而且一般对象导向程序员也比较不熟悉 SAX 所采用的 callback 事件处理方式,常常会用得不恰当。程序员对 SAX 不满,再度寻觅一个更好的 API,他们找到了 DOM。

DOM
DOM 的全名是 Document Object Model。Java 版的 DOM 提供了一个和 XML 文件不同的外观。基本上 DOM 的文件是一个 tree,你可以任意地存取、修改这个由 XML 文件所形成的 DOM tree。SAX 所采用的循序、事件式的处理方式,在 DOM 引进对象导向观念后得到了平衡。对 DOM 来说,每个项目都是特定型态的节点,都继承自 Node 接口。常见的节点有 Document、Text、Element、以及 Attribute 等,这些节点都可以有子节点,XML 文件可以构成一棵完整的 DOM tree。Java 程序员只要到 W3C 下载 DOM 回来即可使用 DOM。XML 再度被用到 Java 程序中,程序员比较能接受此 API,而且用得凶。

但是,想使用 DOM,仍然必须全盘了解 XML,逼得程序员还是得回去了解 XML 的规格书(不过 www.xml.com 有一个注释版的文件,较易 阅读),逼得他们去学一些一般程序用不着的概念,比方说:entities、namespaces、以及处理指令(processing instruction)。再者,DOM 要求树状图必须整体在内存中, 使得 Java 程序的效能变差,所以不少程序员不是回去使用 SAX,就是决定再等一等。

JAXP
有了 Sun 所设计的 JAXP(全名是 Java API for XML Parsing),Java 版本的 XML API 终于开始正视到一个重要的事实:许多 Java 程序员只希望让程序兼容于 XML,但不想把 XML 的规格读到滚瓜烂熟。JAXP 让你可以利用简单的方式来获得一个 DOM Document 或 SAX 剖析器,因此程序员不用再为不同厂商的不同版本大伤脑筋。JAXP 也意图让你的程序只需小修改就可换成其它厂商的实作版本。这才是程序员习惯的方式。

然而,JAXP 只是让底下的实作可以交换,整个 JAXP 还是建构在 DOM 和 SAX 这两个不太好用的 API 上。因为它支持旧版的 API(SAX 1.0 与 DOM Level 1),所以造成一些 不方便的限制。

JDOM
JDOM(Java Document Object Model)是一个新的 API,用来提供 Java 程序处理 XML 的能力。更重要的是:它还是第一个明确地针对 Java 程序员所设计用来处理 XML 的 API,这也意味着它符合一般 Java 程序员的期待、习惯、和希望。此 API 不要求程序员一板一演地操作树状结构,而是,比方说,直接的操作某 Element。比较起来,传统的方式可就麻烦了:首先你得逛到树中的 Element 节点的子节点,判断其是否为文字节点,然后才能取得其值。

而且,method 就可直接传出集合型态的对象,不像其它 API 要用特殊的方式(比方说:DOM 的 NamedNodeMap,SAX 的 Attributes),这使得 JDOM 比 DOM 更直觉好用。但是因为 JDOM 已经针对 Java 做了最佳化,所以它的性能可以媲美 SAX。关于 JDOM(以类似 Apache 方式授权的一个开放原始码计画)的更多信息,你可以在 www.jdom.org 找到,或者读我的书 Java and XML 第九章。

或许,JDOM 所带来的思维方向比 JDOM API 本身重要。它不强迫每个想使用 XML 的 Java 程序员都必须训练好 XML 的十八般武艺,它允许程序员能发挥杠杆原理,以现有的 XML 知识就能使用 XML 的 API。程序员不用再处处迁就 API 了,XML 可能因此会得到许多程序的支持。

这不过只是个开端 ......
从这些的 XML API,我们看出他们之间明显的演进,从简单到深入,从 XML 导向到 Java 导向,从少数人表决到多数人参与制定,XML 终于变成对所有 Java 程序员有价值的一套解决方案。虽然深入探访 XML 的阴暗角落仍是有人要做的事,但却不是所有想用 XML 的程序员都必须遭遇这样的磨难。我认为:那些天天都在用 XML 的人,不管是 XML 专家也好,或是 Java 程序员也好,有责任暂时搁下他们的先见之明和超高标准,而先致力于让 Java 变得好用、好懂,让人忍不住地想去采用它。

虽然 JDOM 的方向对了,但也只是个开始,未来的路还很长。DOM 和 SAX 将会对此有所贡献。这三个 API,再加上改良后的 JAXP,将对程序员更有帮助,这么一来,使用 XML 的程序员也会多了起来。

想更进一部地了解这些 API 吗?请加入 JDOM mailing lists,在这里每天都有一堆人在讨论如何改进这些 API。你不妨下载这些 API 回来使用,并将你的想法、你的期望、你的需求告知这些 API 的作者。别让 XML 导引你的工作的进行,应该是让你的工作导引 XML 的发展。 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Java编程中更新XML文档的常用方法  (2005-03-12)
 ·XML和Java:一个强大的组合  (2005-03-12)
 ·Java XML教程(附:源程序A)  (2005-03-12)
 ·Java与XML联合编程  (2005-03-12)
 ·Java与XML联合编程之DOM篇  (2005-03-12)
 ·Java与XML联合编程之SAX篇  (2005-03-12)
 ·使用JavaServer Pages技术生成动  (2005-03-12)
 ·使用Java Swing 创建一个XML编辑  (2005-03-12)
 ·使用Java Swing 创建一个XML编辑  (2005-03-12)
 ·使用Java Swing 创建一个XML编辑  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统