查看: 7644|回复: 0
打印 上一主题 下一主题

使用Java自带SAX工具解析XML

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-18 23:15:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
studentInfo.xml
  1. <?xml version="1.0" encoding="gb2312"?>

  2.     <!--如果没有age属性,默认的为20-->
  3.         崔卫兵
  4.         PC学院
  5.         62354666
  6.         男,1982年生,硕士,现就读于北京邮电大学
  7.    
  8.    
  9.         cwb
  10.         PC学院<!--如果没有leader属性,默

  11. 认的为leader-->
  12.         62358888
  13.         男,1987年生,硕士,现就读于中国农业大学
  14.    
  15.    
  16.         xxxxx
  17.         xxx学院
  18.         66666666
  19.         注视中,注释中
  20.    

复制代码
SAXHandler.java
  1. package saxExample;

  2. import java.util.HashMap;
  3. import org.xml.sax.*;
  4. import org.xml.sax.helpers.DefaultHandler;

  5. /**
  6. * 继承DefaultHandler类,用SAX实现对xml的遍历
  7. * @author cuiweibing
  8. * @since 2007.8.8
  9. */


  10. public class SAXHandler
  11.     extends DefaultHandler {
  12.   //存放所有的节点(这里的节点等于原来的节点+编号)以及它所对应的值
  13.   private HashMap hashMap = new HashMap();
  14.   //目前的节点
  15.   private String currentElement = null;
  16.   //目前节点所对应的值
  17.   private String currentValue = null;
  18.   //用于节点编号(具体到person)
  19.   private static int i=-1;

  20.   public HashMap getHashMap() {
  21.     return hashMap;
  22.   }

  23.   public void characters(char[] ch, int start, int length) throws SAXException {
  24.     //取出目前节点对应的值
  25.     currentValue = new String(ch, start, length);
  26.   }

  27.   public void startElement(String uri, String localName, String qName,
  28.                            Attributes attr) throws SAXException {
  29.     if(qName.equalsIgnoreCase("student")){
  30.       //currentElement= "";
  31.     }else if (qName.equalsIgnoreCase("person")){
  32.       i++;
  33.       //currentElement= "";
  34.       String age=attr.getValue("age");
  35.       if(age!=null){
  36.        hashMap.put(qName+"-age"+i, age);
  37.       }else{
  38.        hashMap.put(qName+"-age"+i, "20");
  39.       }
  40.     }else if (qName.equalsIgnoreCase("college")){
  41.         currentElement= qName;
  42.         String leader=attr.getValue("leader");
  43.         if(leader!=null){
  44.          hashMap.put(qName+"-leader"+i, leader);
  45.         }else{
  46.          hashMap.put(qName+"-leader"+i, "leader");
  47.         }
  48.     }else{
  49.       currentElement= qName;
  50.     }

  51.   }

  52.   public void endElement(String uri, String localName, String qName) throws SAXException {
  53.     if (qName.equalsIgnoreCase("student")){
  54. //      hashMap.put(currentElement, currentValue);
  55.     }else if (qName.equalsIgnoreCase("person")){

  56.     }else{
  57.       currentElement+=i;
  58.       hashMap.put(currentElement, currentValue);
  59.     }
  60.   }
  61. }
复制代码
TestSAXHandler.java
  1. package saxExample;

  2. import java.io.File;
  3. import java.util.HashMap;
  4. import javax.xml.parsers.SAXParserFactory;
  5. import javax.xml.parsers.SAXParser;

  6. /**
  7. * 解析主类
  8. * @author cuiweibing
  9. * @since 2007.8.8
  10. */


  11. public class TestSAXHandler {
  12.   public TestSAXHandler() {
  13.   }

  14.   public static void main(String[] args) {
  15.     try{
  16.       //初始化与解析
  17.       SAXHandler handler = new SAXHandler();
  18.       SAXParserFactory saxparserfactory = SAXParserFactory.newInstance();
  19.       SAXParser saxparser = saxparserfactory.newSAXParser();
  20.       saxparser.parse(new File("studentInfo.xml"), handler);

  21.       //解析完后获取解析信息
  22.       HashMap hashMap = handler.getHashMap();
  23.       System.out.println("姓名\t年龄\t学院\t学院领导\t电话\t\t备注");
  24.       for(int i=0;i<hashMap.size();i+=6){
  25.         int j=i/6;
  26.         System.out.print(hashMap.get("name"+j)+"\t");
  27.         System.out.print(hashMap.get("person-age"+j)+"\t");
  28.         System.out.print(hashMap.get("college"+j)+"\t");
  29.         System.out.print(hashMap.get("college-leader"+j)+"\t");
  30.         System.out.print(hashMap.get("telephone"+j)+"\t");
  31.         System.out.println(hashMap.get("notes"+j)+"\t");
  32.       }
  33.     }catch(Exception ex){
  34.       ex.printStackTrace();
  35.     }
  36.   }
  37. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表