服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

[java100例]069、使用sax解析xml

readxmldemo.java


import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;


public class readxmldemo extends defaulthandler {


    public static void main(string[] arguments) {
        if (arguments.length > 0){
     readxmldemo read = new readxmldemo(arguments[0]);
 } else {
     system.out.println("usage: java readxmldemo filename");
 }
    }


    readxmldemo(string xmlfile) {
        file input = new file(xmlfile);
 saxparserfactory factory = saxparserfactory.newinstance();
 factory.setvalidating(true);
 try {
     saxparser sax = factory.newsaxparser();
     sax.parse(input, new xmlhandler() );
 } catch (parserconfigurationexception pce) {
     system.out.println("could not create that parser.");
     system.out.println(pce.getmessage());
 } catch (saxexception saxe) {
     system.out.println("problem with the sax parser.");
     system.out.println(saxe.getmessage());
 } catch (ioexception ioe) {
     system.out.println("error reading file.");
     system.out.println(ioe.getmessage());
 }
    }
}


class xmlhandler extends defaulthandler {
    static int reading_name = 1;
    static int reading_sex = 2;
    static int reading_birth = 3;
    static int reading_nothing = 0;
    int currentactivity = reading_nothing;
    readxml xml = new readxml();


    xmlhandler() {
        super();
    }


    public void startelement(string uri, string localname, string qname, attributes attributes) {
   
        if (qname.equals("title"))
            currentactivity = reading_name;
 else if (qname.equals("file"))
     currentactivity = reading_sex;
 //else if (qname.equals("birth"))
     //currentactivity = reading_birth;
    }


    public void characters(char[] ch, int start, int length) {
        string value = new string(ch, start, length);
 if (currentactivity == reading_name)
     xml.name = value;
 if (currentactivity == reading_sex)
     xml.sex = value;
 //if (currentactivity == reading_birth)
     //xml.birth = value;
    }


    public void endelement(string uri, string localname, string qname) {
        if (qname.equals("page")) {
     system.out.println("name: "+xml.name);
     system.out.println("sex: "+xml.sex);
     //system.out.println("birth: "+xml.birth);
     xml = new readxml();
 }
    }
}


class readxml {
    string name;
    string sex;
    string birth;
}


 


 


saxparsepage.java


import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
/**
 * <p>title: 使用sax解析xml</p>
 * <p>description: 使用sax接口解析book.xml文件</p>
 * <p>copyright: copyright (c) 2003</p>
 * <p>filename: saxparsepage.java</p>
 * @version 1.0
 */
public class saxparsepage extends defaulthandler {
/**
 *<br>方法说明:主方法,声明解析工厂和加载xml文件
 *<br>输入参数:
 *<br>返回类型:
 */
  public static void main(string[] argv) {
    try {
      //建立sax解析工厂
      saxparserfactory spfactory = saxparserfactory.newinstance();
      //生成sax解析对象
      saxparser parser = spfactory.newsaxparser();
      //指定xml文件,进行xml解析
      parser.parse(new file("book.xml"), new saxparsepage());
    } catch (exception e) {
      e.printstacktrace();
    }
  }
/**
 *<br>方法说明:文件打开时调用
 *<br>输入参数:
 *<br>返回类型:
 */
  public void startdocument() {
    system.out.println("***开始解析***");
  }
/**
 *<br>方法说明:当遇到开始标记时调用
 *<br>输入参数:
 *<br>返回类型:
 */
  public void startelement(string uri,
                           string localname,
                           string qname,
                           attributes attributes) throws saxexception {


    system.out.println("节点开始:" + qname);
    for(int i=0;i<attributes.getlength();i++){
     system.out.println("节点属性名称:" + attributes.getqname(i));
     system.out.println("节点属性值:"+attributes.getvalue(i));
    }
  }
/**
 *<br>方法说明:当分析器遇到无法识别为标记或者指令类型字符时调用
 *<br>输入参数:
 *<br>返回类型:
 */
  public void characters(char[] ch,
                         int offset,
                         int length) throws saxexception{


    system.out.println("节点数据:" + new string(ch, offset, length));
  }
/**
 *<br>方法说明:当遇到节点结束时调用
 *<br>输入参数:
 *<br>返回类型:
 */
  public void endelement(string uri,
                         string localname,
                         string qname) {


    system.out.println("节点结束:" + qname);
  }
/**
 *<br>方法说明:当到文档的末尾调用
 *<br>输入参数:
 *<br>返回类型:
 */
  public void enddocument() {
    system.out.println("****文件解析完毕****");
  }
}

扫描关注微信公众号