| 网站首页 | 资讯 | Hack | 漏洞 | 网管 | 编程 | 培训 | 品黑页 | 软件 | 论坛 | 动画 | 视频 | 经典 | 教学站 | 黑客点睛 | 
服务导航 我要发布 主力频道 空间域名 精华收集 服务器出租 黑客培训 光盘刻录 特色服务 解决方案 我要投诉
您现在的位置: 华夏黑客同盟 >> 编程 >> 其它编程 >> 正文 用户登录 新用户注册
[图文]XML的JAVA 解析(一)(7)           ★★★ 【字体:
XML的JAVA 解析(一)(7)
作者:佚名 文章来源:本站原创 点击数: 更新时间:2008-2-15

class Example6Triangle extends DefaultHandler {



   // 当前三角形的本地引用...
        private Triangle currentTriangle;

   // Parent...
   ContentHandler parent;

   // XML 解析器
   XMLReader parser;

  // 从"characters" SAX事件中收集数据的缓存。
   private CharArrayWriter contents = new CharArrayWriter();


   public void collectTriangle( XMLReader parser,
               ContentHandler parent,
               Triangle newTriangle ) {
      this.parent = parent;
      this.parser = parser;
      parser.setContentHandler( this );
      currentTriangle = newTriangle;
   }



   public void endElement( String namespaceURI,
               String localName,
              String qName ) throws SAXException {


      if ( localName.equals( "x" ) ) {
                          currentTriangle.x =
                             Integer.valueOf
                             (contents.toString().trim()).intValue();
      }

      if ( localName.equals( "y" ) ) {
                          currentTriangle.y =
                            Integer.valueOf
                            (contents.toString().trim()).intValue();
      }

      if ( localName.equals( "width" ) ) {
                          currentTriangle.width =
                             Integer.valueOf
                             (contents.toString().trim()).intValue();
      }

      if ( localName.equals( "height" ) ) {
                          currentTriangle.height = Integer.valueOf
                             (contents.toString().trim()).intValue();
      }

      if ( localName.equals( "Triangle" ) ) {
                    // 把内容处理器(content handler)换回成parent
         parser.setContentHandler(parent);
      }



   }

   public void characters( char[] ch, int start, int length )
                  throws SAXException {
      // 从"characters" SAX事件中收集数据到缓存。
      contents.write( ch, start, length );

   }


}

注意我们得到了来自shape类的相同输出:


Example6:
Circle: circ1 x: 10 y: 10 width: 3 height: 3
Square: sq1 x: 0 y: 0 width: 3 height: 3
Triange: tri1 x: 3 y: 0 width: 5 height: 3
Triange: tri2 x: 5 y: 0 width: 5 height: 3

结论
我们以经论证,当处理得当时SAX较DOM API有很多优势。我们已经涉及到了一些基本的可以让我们高效处理简单及中等复杂度的XML文档的一些理论。我们也指出了使用SAX API的一些要谨慎处理的地方。

最后,我希望当你因为在苛刻的环境中使用DOM API而感到进退两难时会想到SAX API。

在下一篇文章中,我们将解决递归XML结构、混用标签名及SAX数据导航方面的问题。这三个总线贯穿于一个集中处理了容器管理,能够应对最复杂的XML映射的通用类库。

 

关于作者
Bob Hustead has been wasting way too much time on computers since the Commodore 64 was introduced. 他起初致力于C语言的通信协议与设备驱动开发,后来转移到面象对象设计领域,先是C++后来又是Java。再后来转而致力于中间件架构。Bob目前是一名企业应用底层架构师,效力于纽约城的AIG Insurance。

资源

  • 要下载该文的全部源代码zip文件,请到:
    http://www.javaworld.com/jw-08-2000/sax/jw-0804-sax.zip
  • 关于SAX API 2.0的文档,参见"SAX 2.0/Java final release":
    http://www.megginson.com/SAX/Java/index.html
  • Java 2 Performance and Idiom Guide, Craig Larman and Rhett Guthrie (Prentice Hall, Aug. 27, 1999):
    http://www.amazon.com/exec/obidos/ASIN/0130142603/qid%3D964730084/002-7840394-9715257
  • 其它XML的有用信息,参见:
    http://www.xml.org
  • 关于Apache Xerces XML 解析器,请到:
    http://xml.apache.org/xerces-j/index.html
责任编辑:章新艳  联系方式  Email:章新艳
电话:51228163
  • 上一篇编程:

  • 下一篇编程:
  • (只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    姓 名:
    * 游客填写  ·注册用户
    主 页:
    评 分:
    1分 2分 3分 4分 5分
    评论内容:
    验证码: *
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  • 最新hack更新
    最新推荐资讯
    相关编程
    java 文件目录操作方法
    公历农历互查的JavaScript
    Java中实现FTP上传下载
    Java入门运算符优先级
    Spring中事件处理技巧
    Java泛型理解等价实现
    一篇Socket编程的文章
    Java语言的关键特性
    Java----介绍三个集合容器库
    Java实现Logo画面的编程
    最新会员软件
    最新推荐视频
    最新推荐动画

    Copyright @ 2005 77169.Net Inc. All rights reserved. 华夏黑客同盟 版权所有
    北京市电信通提供网络带宽

    mailto:webmaster@77169.net
    咨询QQ号:836982 / 59280880
    联系站长 QQ38588913
    热线电话: 86-10-67634029/676229433
    京ICP证041431号