文章收藏-FAQ 位置:电脑学习网

使用 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();
    }
  }
}

     [文章来源:“十万个为什么”电脑学习网]
     [网络地址:http://why100000.com]
     [版权声明:除本站部分特别声明禁止转载的专稿外,其他的文章可以自由转载,但请务必注明出处和原始作者。本站文章版权归文章原作者所有。如果本站转载的文章有版权问题请联系本站,我们会尽快予以更正。]
 

【字体:[大] [中] [小] 【加入收藏】 【发表评论】 【关闭本窗口】

Copyright © “十万个为什么”电脑学习网 2000-2007 陕ICP备06007929号
站务联系:MSN & Email:zhangking2008@gmail.com  QQ:9365822