新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 计算机科学论坛计算机技术与应用『 Java/Eclipse 』 → 使用 SAX 来与那些需要 DOM 和 JDOM 输入的应用通信 (转贴) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6659 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 使用 SAX 来与那些需要 DOM 和 JDOM 输入的应用通信 (转贴) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     mfc42d 帅哥哟,离线,有人找我吗?
      
      
      等级:大三暑假(ITELS考了6.5分!)(版主)
      文章:65
      积分:882
      门派:XML.ORG.CN
      注册:2004/6/13

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给mfc42d发送一个短消息 把mfc42d加入好友 查看mfc42d的个人资料 搜索mfc42d在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看mfc42d的博客楼主
    发贴心情 使用 SAX 来与那些需要 DOM 和 JDOM 输入的应用通信 (转贴)


    内容:

    从 SAX 到 DOM
    从 SAX 到 JDOM
    参考资料
    关于作者
    对本文的评价




    使用 SAX 来与那些需要 DOM 和 JDOM 输入的应用通信
    Brett McLaughlin (brett@newInstance.com)
    Enhydra 策略顾问,Lutris Technologies
    2001 年 4 月

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

    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 作为示例。DOMParser 和 SAXParser 类实际上是一个单类 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 这个“幌子”。有了这个提示在手,您现在已变得更加聪明,真的可以向您的朋友炫耀了!

    参考资料

    请访问 SAX 的发源地,Dave Megginson 的 SAX 页面。在那里您会找到已发布的下载、历史和一些已知的错误以及其它一些内容。
    查找更多有关 JDOM 的内容,包括项目概述、下载和到邮件列表的链接。
    探寻整个 DOM 世界,从 DOM 上的 W3C 页面开始。
    在 developerWorks 下的 XML 专区,查找最近其它的提示:

    使用 XSLT 作为到 Web 页面目录的快捷方式
    用 RDF 记录样式表
    在 XSLT 中使用查寻表
    移动 DOM 节点(不触发 Wrong-document 异常)
    通过 XSLT 使用 JDOM
    使用 SAX 和 SAX helper 类来实现供应商独立性
    关于作者
    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 与他联系。


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/11 13:42:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/9/21 10:58:28

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    46.875ms