动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.关于23种设计模式的有趣见解.
.对象引用是怎样严重影响垃圾收集.
.SSO各产品单点登录的简单实现.
.老话题,JavaBean实现多文件上传.
.破除java神话之原子操作都是线程.
.判断鼠标双击.
.Java软件开发学习笔记(三).
.用 WebSphere Studio 创建 JSF 提.
.错误的堆大小产生的“堆问题”.
.通过套接字传递对象.
.Classworking 工具箱: .
.Eclipse Tanghan Plugin帮助文件.
.当前Java软件开发中几种认识误区.
.软件项目开发之 软件过程RUP初探.
.关于移动百宝箱应用打包问题的解.
..NET下开发Windows服务应用程序.
.Thinking in Java第三版读书笔记.
.Java中的String、StringBuffer和.
.J2EE相关设计模式讨论.
.toLocaleTimeString 方法.

Java实现学习笔记(一)

发表日期:2008-1-5 |



  首先,先给出一个比较基本的处理XML文件的程序。你不必细看,直接跳过即可。需要时可以返回来看。
  
  Echo01.Java
  
  import java.io.*;
  
  import org.xml.sax.*;
  
  import org.xml.sax.helpers.DefaultHandler;
  
  import javax.xml.parsers.SAXParserFactory;
  
  import javax.xml.parsers.ParserConfigurationException;
  
  import javax.xml.parsers.SAXParser;
  
  public class Echo01 extends DefaultHandler
  
  {
  
  StringBuffer textBuffer;
  
  public static void main(String argv[])
  
  {
  
    if (argv.length != 1) {
  
      System.err.println("Usage: cmd filename");
  
      System.exit(1);
  
    }
  
    // Use an instance of ourselves as the SAX event handler
  
    DefaultHandler handler = new Echo01();
  
    // Use the default (non-validating) parser
  
       SAXParserFactory factory = SAXParserFactory.newInstance();
  
    try {
  
      // Set up output stream
  
      out = new OutputStreamWriter(System.out, "UTF-8");
  
      // Parse the input
  
      SAXParser saxParser = factory.newSAXParser();
  
      saxParser.parse( new File(argv[0]), handler);
  
    } catch (Throwable t) {
  
      t.printStackTrace();
  
    }
  
    System.exit(0);
  
  }
  
  static private Writer out;
  
  //===========================================================
  
  // SAX DocumentHandler methods
  
  //===========================================================
  
  public void startDocument()
  
  throws SAXException
  
  {
  
    emit("");
  
    nl();
  
  }
  
  public void endDocument()
  
  throws SAXException
  
  {
  
    try {
  
      nl();
  
      out.flush();
  
    } catch (IOException e) {
  
      throw new SAXException("I/O error", e);
  
    }
  
  }
  
  public void startElement(String namespaceURI,
  
               String sName, // simple name
  
               String qName, // qualified name
  
               Attributes attrs)
  
  throws SAXException
  
  {
  
    echoText();
  
       String eName = sName; // element name
  
    if ("".equals(eName)) eName = qName; // not namespaceAware
  
    emit("<"+eName);
  
    if (attrs != null) {
  
      for (int i = 0; i < attrs.getLength(); i++) {
  
        String aName = attrs.getLocalName(i); // Attr name
  
        if ("".equals(aName)) aName = attrs.getQName(i);
  
        emit(" ");
  
        emit(aName+"=\""+attrs.getValue(i)+"\"");
  
             }
    }
  
    emit(">");
  
  }
  
  public void endElement(String namespaceURI,
  
              String sName, // simple name
  
              String qName // qualified name
  
             )
  
  throws SAXException
  
  {
  
    echoText();
  
    String eName = sName; // element name
  
    if ("".equals(eName)) eName = qName; // not namespaceAware
  
    emit("");
  
  }
  
  public void characters(char buf[], int offset, int len)
  
  throws SAXException
  
  {
  
           String s = new String(buf, offset, len);
  
    if (textBuffer == null) {
  
      textBuffer = new StringBuffer(s);
  
    } else {
  
      textBuffer.append(s);
  
    }
  
  }
  
  //===========================================================
  
  // Utility Methods ...
  
  //===========================================================
  
  // Display text accumulated in the character buffer
  
  private void echoText()
  
  throws SAXException
  
  {
  
    if (textBuffer == null) return;
  
              String s = ""+textBuffer;
  
       emit(s);
  
       textBuffer = null;
  
  }
  
  // Wrap I/O exceptions in SAX exceptions, to
  
  // suit handler signature requirements
  
  private void emit(String s)
  
  throws SAXException
  
  {
  
    try {
  
      out.write(s);
  
      out.flush();
  
    } catch (IOException e) {
  
      throw new SAXException("I/O error", e);
  
    }
  
  }
  
  // Start a new line
  
  private void nl()
  
  throws SAXException
  
  {
  
   String lineEnd = System.getProperty("line.separator");
  
    try {
  
      out.write(lineEnd);
  
    } catch (IOException e) {
  
      throw new SAXException("I/O error", e);
  
    }
  
  }
  
  }
  
  从程序中可以看出,解析一个XML文件的核心语句是下面一部分:
  
   // Use an instance of ourselves as the SAX event handler
  
    DefaultHandler handler = new Echo01();
  
     // Use the default (non-validating) parser
  
       SAXParserFactory factory = SAXParserFactory.newInstance();
  
    try {
  
      // Set up output stream
  
      out = new OutputStreamWriter(System.out, "UTF-8");
  
       // Parse the input
  
      SAXParser saxParser = factory.newSAXParser();
  
      saxParser.parse( new File(argv[0]), handler);
  
     } catch (Throwable t) {
  
      t.printStackTrace();
  
    }
  
  先是创建一个SAXParserFactory工厂类的实例,然后通过SAXParser saxParser = factory.newSAXParser(); 这个工厂类的方法创建了一个saxParser。将xml文件(new File(argv[0]))和一个Sax Event Handler(handler)(在这个程序里面,这个Handler其实是本身这个类,这个类继续了org.xml.sax.helpers.DefaultHandler 这个类,并且在前面初始化了它:DefaultHandler handler = new Echo01(); )传递给它,让它进行解析。
  
  关于xml文件的解析过程中的处理全部在Handler里面实现。一般Parser接受的是DefaultHandler或者HandlerBase这两个类。 这个例子里面的类是继续DefaultHandler这个虚类的。看下图:
  
 Java实现学习笔记(一)(图一)

  而DefaultHandler是实现了EntityResolver, DTDHandler, ContentHandler, ErrorHandler四个接口的虚类。分别定义了如下的方法:
  
 Java实现学习笔记(一)(图二)

  不同的方法,在不同的时候被Parser调用,(这个不同的时候就是Event-based)
  
  具体介绍:(暂略)
  
  DefualtHandler的UML图如下:
  
 
上一篇:JCreator Pro 3.0与WTK2.0配置心得 人气:403
下一篇:安装SJD节省软件开支 人气:292
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号