|  | 级别: 初级 Brett McLaughlin (brett@newInstance.com), Enhydra 策略顾问, Lutris Technologies
2001 年 4 月 01 日 您正在学习如何使用 JDOM 吗? 没有哪一种 API不是孤立的,在本文中,您将了解如何轻易地从 JDOM 转换到 SAX 和DOM,从而使用所有这三种 API 来对 XML应用程序流畅地编程。本文中的代码样本提供了从 JDOM 到 SAX 和 JDOM 到DOM 的转换示例。
您可能和我一样已经跳上了 JDOM 这辆“彩车”。JDOM
易于使用(按照我较偏爱的 JDOM 作者之一的观点来看),并很容易使 XML
和 Java 配合默契。即,如果我甚至建议 JDOM 可以替换 DOM 和 SAX
并成为唯一的 Java 和 XML API 的话,那我一定是一个傻瓜。对于
DOM、SAX 和 JDOM,有许多不同的应用程序,而在基于 XML
的应用中几乎肯定会碰到所有这三种。至于 JDOM,
需要使您的合作者和管理者(他们也许没有象您一样走在最前沿)相信您可以使用
JDOM,而且还可以使程序与许多其它不使用 JDOM
的应用交互。这意味着需要从 JDOM 转换到 SAX 以及从 JDOM 转换到
DOM。在本文中,我将向您展示如何去做这两种转换。
从 JDOM 到
SAX
在使用 SAX 时,每一件事情都基于进入的事件系列。SAX
程序员编写回调方法实现它们,是在发生这些各种事件时执行的代码片段。所有
SAX 语法分析的核心是 SAX
org.xml.sax.ContentHandler
接口,它定义了回调,该回调是 XML
文档处理的一部分。除此以外,
ErrorHandler 、
DTDHandler
和
EntityResolver
接口也很重要。一旦建立了这些接口的实现,就可以将它们交给
org.jdom.output.SAXOutputter
类,而自己可以坐下来休息一会儿。清单 1
显示了它是如何工作的,并提供给您一些可以参考的想法。
清单 1. 从 JDOM 到 SAX 的转换
public convertToSAX(Document jdomDoc) throws JDOMException {
SAXOutputter outputter = new SAXOutputter(new MyContentHandlerImpl());
// Set the EntityResolver impl
outputter.setEntityResolver(new MyEntityResolverImpl());
// Set the DTDHandler impl
outputter.setEntityResolver(new MyDTDHandlerImpl());
// Set the ErrorHandler impl
outputter.setEntityResolver(new MyErrorHandlerImpl());
// Fire the SAX events
outputter.output(jdomDoc);
}
|
从 JDOM 到
DOM
从 JDOM 结构转换到 DOM 结构与上面的方法类似。事实上,它甚至比使用
SAX 还容易,因为 DOM 和 JDOM
有略微相似的结构。这里没有什么特别之处:正如使用
SAXOutputter 输出到 SAX 一样,您需要使用
org.jdom.output.DOMOutputter 类输出到 DOM。清单 2
显示了这个起作用的类。
清单 2. 从 JDOM 到 DOM 的转换
public org.w3c.dom.Document convertToDOM(org.jdom.Document jdomDoc)
throws JDOMException {
DOMOutputter outputter = new DOMOutputter();
return outputter.output(jdomDoc);
}
public org.w3c.dom.Element convertToDOM(org.jdom.Element jdomElement)
throws JDOMException {
DOMOutputter outputter = new DOMOutputter();
return outputter.output(jdomElement);
}
public org.w3c.dom.Attr convertToDOM(org.jdom.Document jdomAttribute)
throws JDOMException {
DOMOutputter outputter = new DOMOutputter();
return outputter.output(jdomAttribute);
}
|
当然,在
SAXOutputter 和
DOMOutputter
中,还有其它一些有帮助的方法,这里只是一些基本的。如果您读过我所写的其它
XML 提示(请参阅“参考资料”),那么通过本文,您已知道如何使用 JDOM
以及如何把 JDOM 与接收 SAX 和 DOM 作为输入的应用程序和生成 SAX 和
DOM 的应用程序一起使用。继续学习并不断积累新知识,用 XML
的各种格式来交换 XML!
参考资料
关于作者  | |  | Brett McLaughlin (
brett@newInstance.com) 是
Lutris Technologies 的 Enhydra
策略顾问和分布式系统体系结构方面的专家。他是
Java 和 XML
(O'Reilly) 的作者。他还参加了,如 Java servlets、Enterprise
JavaBeans 技术、XML 和商家对商家应用等技术的研究。他与 Jason Hunter
一起建立了 JDOM 项目,该项目为在 JAVA 应用程序中控制 XML
提供一个简单的 API。他还是 Apache Cocoon 项目和 EJBoss EJB
服务器的活跃开发人员以及 Apache Turbine 项目的共同创建者。
|
对本文的评价
|  | IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。 |