您可能和我一样已经跳上了 JDOM 这辆“彩车”。JDOM 易于使用(按照我较偏爱的 JDOM 作者之一的观点来看),并很容易使 XML 和 Java 配合默契。即,如果我甚至建议 JDOM 可以替换 DOM 和 SAX 并成为唯一的 Java 和 XML API 的话,那我一定是一个傻瓜。对于 DOM、SAX 和 JDOM,有许多不同的应用程序,而在基于 XML 的应用中几乎肯定会碰到所有这三种。至于 JDOM, 需要使您的合作者和管理者(他们也许没有象您一样走在最前沿)相信您可以使用 JDOM,而且还可以使程序与许多其它不使用 JDOM 的应用交互。这意味着需要从 JDOM 转换到 SAX 以及从 JDOM 转换到 DOM。在本文中,我将向您展示如何去做这两种转换。
在使用 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 结构与上面的方法类似。事实上,它甚至比使用
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!
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文.
- 请在
Dave Megginson
的站点上访问 SAX 的发源地。
- 在 JDOM 主页上查找更多有关
JDOM的内容。
- 在
W3C 的 DOM 页面 查找 DOM
的背景知识。
- 在 developerWorks 上的 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 项目的共同创建者。