服务热线:13616026886

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

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

使用java自带sax工具解析xml

studentinfo.xml


<?xml version="1.0" encoding="gb2312"?>
<student>
    <person age="25"><!--如果没有age属性,默认的为20-->
        <name>崔卫兵</name>
        <college>pc学院</college>
        <telephone>62354666</telephone>
        <notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
    </person>
    <person>
        <name>cwb</name>
        <college leader="leader1">pc学院</college><!--如果没有leader属性,默

认的为leader-->
        <telephone>62358888</telephone>
        <notes>男,1987年生,硕士,现就读于中国农业大学</notes>
    </person>
    <person age="45">
        <name>xxxxx</name>
        <college leader="学院领导">xxx学院</college>
        <telephone>66666666</telephone>
        <notes>注视中,注释中</notes>
    </person>
</student>

saxhandler.java

package saxexample;

import java.util.hashmap;
import org.xml.sax.*;
import org.xml.sax.helpers.defaulthandler;

/**
 * 继承defaulthandler类,用sax实现对xml的遍历
 * @author cuiweibing
 * @since 2007.8.8
 */


public class saxhandler
    extends defaulthandler {
  //存放所有的节点(这里的节点等于原来的节点+编号)以及它所对应的值
  private hashmap<string,string> hashmap = new hashmap<string,string>();
  //目前的节点
  private string currentelement = null;
  //目前节点所对应的值
  private string currentvalue = null;
  //用于节点编号(具体到person)
  private static int i=-1;
 
  public hashmap gethashmap() {
    return hashmap;
  }
 
  public void characters(char[] ch, int start, int length) throws saxexception {
    //取出目前节点对应的值
    currentvalue = new string(ch, start, length);
  }
 
  public void startelement(string uri, string localname, string qname,
                           attributes attr) throws saxexception {
    if(qname.equalsignorecase("student")){
      //currentelement= "";
    }else if (qname.equalsignorecase("person")){
      i++;
      //currentelement= "";
      string age=attr.getvalue("age");
      if(age!=null){
       hashmap.put(qname+"-age"+i, age);
      }else{
       hashmap.put(qname+"-age"+i, "20");
      }
    }else if (qname.equalsignorecase("college")){
        currentelement= qname;
        string leader=attr.getvalue("leader");
        if(leader!=null){
         hashmap.put(qname+"-leader"+i, leader);
        }else{
         hashmap.put(qname+"-leader"+i, "leader");
        }
    }else{
      currentelement= qname;
    }
 
  }
 
  public void endelement(string uri, string localname, string qname) throws saxexception {
    if (qname.equalsignorecase("student")){
//      hashmap.put(currentelement, currentvalue);
    }else if (qname.equalsignorecase("person")){
 
    }else{
      currentelement+=i;
      hashmap.put(currentelement, currentvalue);
    }
  }

testsaxhandler.java

package saxexample;

import java.io.file;
import java.util.hashmap;
import javax.xml.parsers.saxparserfactory;
import javax.xml.parsers.saxparser;

/**
 * 解析主类
 * @author cuiweibing
 * @since 2007.8.8
 */


public class testsaxhandler {
  public testsaxhandler() {
  }

  public static void main(string[] args) {
    try{
      //初始化与解析
      saxhandler handler = new saxhandler();
      saxparserfactory saxparserfactory = saxparserfactory.newinstance();
      saxparser saxparser = saxparserfactory.newsaxparser();
      saxparser.parse(new file("studentinfo.xml"), handler);

      //解析完后获取解析信息
      hashmap hashmap = handler.gethashmap();
      system.out.println("姓名/t年龄/t学院/t学院领导/t电话/t/t备注");
      for(int i=0;i<hashmap.size();i+=6){
        int j=i/6;
        system.out.print(hashmap.get("name"+j)+"/t");
        system.out.print(hashmap.get("person-age"+j)+"/t");
        system.out.print(hashmap.get("college"+j)+"/t");
        system.out.print(hashmap.get("college-leader"+j)+"/t");
        system.out.print(hashmap.get("telephone"+j)+"/t");
        system.out.println(hashmap.get("notes"+j)+"/t");
      }
    }catch(exception ex){
      ex.printstacktrace();
    }
  }
}

扫描关注微信公众号