SSH框架--02SAX解析xml

package com.joker.sax;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.joker.vo.Student;

public class MyHandler extends DefaultHandler{
	public List<Student> list=new ArrayList<Student>();
	private Student student;
	private String nowtag;//当前正在被解析的标签
	//文档解析开始
	@Override
	public void startDocument() throws SAXException {
		System.out.println("我要开始解析文档了");
	}
	//元素 标签 Element
	//开始解析元素
	public void startElement(
			String uri, 
			String localName, 
			String qName,
			Attributes attributes) throws SAXException {
		//System.out.println("uri:"+uri+" localName:"+localName+" qName:"+qName);
		//qName代表标签名
		
		if(qName.equals("student")){
			student=new Student();
			//HashMap
			String stuno=attributes.getValue("stuno");
			//System.out.println(stuno);
			student.setStuno(stuno);
		}
		
		System.out.println(qName);
		nowtag=qName;//把正在被解析的标签给tagnow
	}
	//用来提供元素内容
	//开始元素 startElement方法结束后调用一次
	//结束元素 endElement方法结束后调用一次
	
	public void characters(
			char[] ch, 
			int start, 
			int length)
			throws SAXException {
		
		String value=new String(ch,start,length);
		if (nowtag.equals("bzr")) {
			System.out.println(value);
		}else if(nowtag.equals("name")){
			student.setName(value);
		}else if(nowtag.equals("age")){
			student.setAge(new Integer(value));
		}else if(nowtag.equals("address")){
			student.setAddress(value);
		}
		/*
		String str=new String(ch);//通过字符数组创建字符串你
		System.out.println("*************");
		System.out.println(str);
		System.out.println("*************");
		*///整个文档
		//元素内容
		/*
		System.out.println("***************");
		System.out.println(value);
		System.out.println("***************");
		*/
	}
	//结束解析元素
	public void endElement(String uri, 
			String localName, 
			String qName)
			throws SAXException {
		if (qName.equals("student")) {
			list.add(student);
		}
		//qName
		nowtag="";
	}
	//文档解析结束
	@Override
	public void endDocument() throws SAXException {
		System.out.println("终于干完了...");
	}
}

下面正八经儿解析

package com.joker;

import java.io.InputStream;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import com.joker.sax.MyHandler;
import com.joker.vo.Student;

public class MySaxParser {
public static void main(String[] args) throws Exception{
		
		//解析器工厂
		SAXParserFactory factory=SAXParserFactory.newInstance();
		//解析器(sax解析器是个傀儡,不干活 ,就相当于一台没有cpu的电脑)
		SAXParser parser=factory.newSAXParser();
		//电脑不能工作...
		//没有处理器...
		//电脑工作=cpu处理+数据
		//数据
		InputStream in=MySaxParser.class.getClassLoader().getResourceAsStream("students.xml");
		//cpu
		//创建cpu   Handler
		MyHandler handler=new MyHandler();
		
		//让电脑使用cpu把数据处理了
		parser.parse(in, handler);
		//获取解析后的数据
		List<Student> list=handler.list;
		System.out.println("***************************");
		for (Student stu:list) {
			System.out.println(stu.getStuno()+" "+stu.getName()+" "+stu.getAge()+" "+stu.getAddress());
		}
		
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值