技巧: 从 JDOM 转换

来源:百度文库 编辑:神马文学网 时间:2024/04/17 04:05:47

内容:

从 JDOM 到 SAX

从 JDOM 到 DOM

参考资料

关于作者

对本文的评价


相关内容:

从 DOM 转换

从 SAX 转换



订阅:

developerWorks 时事通讯




JDOM 没有精确地映射到 DOM 和 SAX,但可以容易地输出到这两者
Brett McLaughlin
Enhydra 策略顾问, Lutris Technologies
2001 年 4 月
您正在学习如何使用 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。在本文中,我将向您展示如何去做这两种转换。
在使用 SAX 时,每一件事情都基于进入的事件系列。SAX 程序员编写回调方法实现它们,是在发生这些各种事件时执行的代码片段。所有 SAX 语法分析的核心是 SAX org.xml.sax.ContentHandler 接口,它定义了回调,该回调是 XML 文档处理的一部分。除此以外, ErrorHandler 、 DTDHandler 和 EntityResolver 接口也很重要。一旦建立了这些接口的实现,就可以将它们交给 org.jdom.output.SAXOutputter 类,而自己可以坐下来休息一会儿。清单 1 显示了它是如何工作的,并提供给您一些可以参考的想法。
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 显示了这个起作用的类。
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 项目的共同创建者。
_xyz