IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

技巧: 从 JDOM 转换

JDOM 没有精确地映射到 DOM 和 SAX,但可以容易地输出到这两者

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

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 文档处理的一部分。除此以外, ErrorHandlerDTDHandlerEntityResolver 接口也很重要。一旦建立了这些接口的实现,就可以将它们交给 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);
}

当然,在 SAXOutputterDOMOutputter 中,还有其它一些有帮助的方法,这里只是一些基本的。如果您读过我所写的其它 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 项目的共同创建者。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?







回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款