跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

技巧:从 SAX 转换

使用 SAX 来与那些需要 DOM 和 JDOM 输入的应用通信

Brett McLaughlin (brett@newInstance.com), Enhydra 策略顾问, Lutris Technologies
Brett McLaughlin 是 Lutris Technologies 的 Enhydra 策略顾问和分布式系统体系结构方面的专家。他是 Java 和 XML (O'Reilly) 的作者。他还参加了,如 Java servlet、Enterprise JavaBeans 技术、XML 和商家对商家应用等技术的研究。他与 Jason Hunter 一起建立了 JDOM 项目,该项目为在 JAVA 应用程序中控制 XML 提供一个简单的 API。他还是 Apache Cocoon 项目和 EJBoss EJB 服务器的活跃开发人员以及 Apache Turbine 项目的共同创建者。可以通过 brett@newInstance.com 与他联系。

简介: Brett McLaughlin 解释了如何使用 SAX 来与那些需要 DOM 和 JDOM 输入的应用通信。这是一个很有用的技术:随着令人激动的 XML API 的出现,开发人员现在能够很容易移来移去。样本代码提供了一个从 SAX 到 JDOM 转换的具体示例。

发布日期: 2001 年 4 月 01 日
级别: 初级
访问情况 : 2030 次浏览
评论: 


SAX 是最好的东西。它迅速、灵巧,而且使您听起来很酷:您是 SAX 程序员。然而其他许多人目前并不是 SAX 程序员,因为 DOM 和 JDOM 使您很容易处理某些任务。(直说吧,SAX 有时不太稳定!)让我们假设您要从正在使用的 SAX 格式中提取 XML 数据并将它们转换成其它开发人员编写程序所需的格式 -- 即,很可能是 DOM 或 JDOM。在本文中,将展示如何从 SAX 转换成 DOM 和 JDOM。然而,这在技术上是不切实际的:我实际上将解释 SAX 与 DOM 或 JDOM 是如何不同,以及如何将 SAX 与其它 API 一起使用。

从 SAX 到 DOM

首先,假定您想从 SAX 转换至 DOM。您会立刻意识到,对示例项目的描述不是很精确。因为,除非手工执行它,否则 SAX 不会将 XML 文档作为任何类型的内存中表示来存储。所以,您永远不会收到“以 SAX 格式”的 XML 文档。即,使用 SAX 构建 DOM 树是很寻常的。SAX 很迅速,所以有什么更好的方式来创建 DOM 树?您会发现,事实上,大多数语法分析器都是以某种形式使用 SAX 来创建 DOM 树。

拿 Apache Xerces 作为示例。 DOMParserSAXParser 类实际上是一个单类 org.apache.xerces.framework.XMLParser 的扩展。 parse() 方法是在超类中定义的,而不是在每个子类中,这意味着在每个子类中是以相同方式进行语法分析。换句话说,当您将 parse() 方法用于 SAX 或 DOM 时,会调用相同的代码。主要的区别是 DOMParser 类会调用一个附加方法, getDocument() , 它在分析完成后返回 DOM 树。所以,虽然您不能明确地从 SAX “转换”到 DOM,但每次在您使用语法分析器时,它都有可能发生,只是您不知道罢了!


从 SAX 到 JDOM

从 SAX 转换到 JDOM 与从 SAX 转换到 DOM 一样,都很难表述清楚。如果说,“我将文档从 SAX 转换成 DOM”,这句话实际上是没有意义的。然而,JDOM 象 DOM 一样,可以使用 SAX 来构建一个 JDOM Document ,就目前来讲,它被证实是最快的文档创建方式。要使用 SAX 执行这一创建,需要使用 JDOM SAXBuilder 类。在清单 1 中显示了这个示例。


清单 1. 从 SAX 到 JDOM 的转换
// Java imports
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
// JDOM imports
import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
public class SAXtoJDOM {
 // XML file to read
 File file;
 public SAXtoJDOM(File file) {
 this.file = file;
 }
 public Document convert() throws JDOMException, IOException {
 // Create new SAXBuilder, using default parser
 SAXBuilder builder = new SAXBuilder();
 Document doc = builder.build(new FileInputStream(file));
 return doc;
 }
 public static void main(String[] args) {
 try {
 File file = new File(args[0]);
 SAXtoJDOM tester = new SAXtoJDOM(file);
 Document doc = tester.convert();
 // Output the document to System.out
 XMLOutputter outputter = new XMLOutputter();
 outputter.output(doc, System.out);
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
}

现在您应该已经了解。从 SAX 转换成 DOM 或从 SAX 转换成 JDOM 稍微有点用词不当。但用 SAX 来构建 DOM 和 JDOM 树是非常简单的,因为它们俩都使用 SAX 这个“幌子”。有了这个提示在手,您现在已变得更加聪明,真的可以向您的朋友炫耀了!


参考资料

关于作者

Brett McLaughlin 是 Lutris Technologies 的 Enhydra 策略顾问和分布式系统体系结构方面的专家。他是 Java 和 XML (O'Reilly) 的作者。他还参加了,如 Java servlet、Enterprise JavaBeans 技术、XML 和商家对商家应用等技术的研究。他与 Jason Hunter 一起建立了 JDOM 项目,该项目为在 JAVA 应用程序中控制 XML 提供一个简单的 API。他还是 Apache Cocoon 项目和 EJBoss EJB 服务器的活跃开发人员以及 Apache Turbine 项目的共同创建者。可以通过 brett@newInstance.com 与他联系。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML
ArticleID=22200
ArticleTitle=技巧:从 SAX 转换
publish-date=04012001
author1-email=brett@newInstance.com
author1-email-cc=brett@newInstance.com

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。