Sax解析XML

很久之前的作业,突然觉得自己学习加写出来的一个简单的xml,挺有成就感的。好久没更新blog了,顺便来一发~

本来想写个android的,貌似最近有点忙。后面加上吧。


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

import junit.framework.TestCase;

public class TestSax extends TestCase {
	public void testSAX() throws Throwable {
		SaxParseService sax = new SaxParseService();
		InputStream input = this.getClass().getClassLoader()
				.getResourceAsStream("zhuhai.xml");
		List<Area> books = sax.getAreas(input);
		for (Area book : books) {
			System.out.println(book.toString());
		}
	}
}

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

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

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

public class SaxParseService extends DefaultHandler {
	private List<Area> areas = null;
	private Area area = null;
	private String preTag = null;// 作用是记录解析时的上一个节点名称
	private List<University> unis = null;
	public SaxParseService() {
	}

	public List<Area> getAreas(InputStream xmlStream) throws Exception {
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser parser = factory.newSAXParser();
		SaxParseService handler = new SaxParseService();
		parser.parse(xmlStream, handler);
		return handler.getAreas();
	}

	public List<Area> getAreas() {
		return areas;
	}

	public void startDocument() throws SAXException {
		areas = new ArrayList<Area>();
		unis = new ArrayList<University>();
	}

	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		
		if ("area".equals(qName)) {
			area = new Area();
			area.setKey(Integer.parseInt(attributes.getValue(0)));
		}
		if ("university".equals(qName)) {
			University uni = new University();
			 uni.setId(Integer.parseInt(attributes.getValue(0)));
			 uni.setName(attributes.getValue(1));
			 unis.add(uni);
		}
		preTag = qName;// 将正在解析的节点名称赋给preTag
	}

	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if ("area".equals(qName)) {
			area.setUniversitys(unis);
			areas.add(area);
			area = null;
			unis = null;
		}
		preTag = null;
	}

	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if (preTag != null) {
			String content = new String(ch, start, length);
			if ("name".equals(preTag)) {
				area.setName(content);

			} else if ("population".equals(preTag)) {
				area.setPopulation(Integer.parseInt(content));

			}
		}
	}
}

import java.util.List;

public class Area {
	int key;
	String name;
	int population;
	List<University> universitys;

	public Area() {

	}

	public int getKey() {
		return key;
	}

	public void setKey(int key) {
		this.key = key;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPopulation() {
		return population;
	}

	public void setPopulation(int population) {
		this.population = population;
	}
	public String toString() {
		String us = "";
		if (universitys != null) {
			for(University u :universitys){
				us +="\n UniversityID:" + u.getId() +  " UniversityName:"
						+ u.getName();
			}
			return "key:" + key + " name:" + name + " population:" + population
					+ us;
		}
		else{
			return "key:" + key + " name:" + name + " population:" + population;

		}
	}

	public List<University> getUniversitys() {
		return universitys;
	}

	public void setUniversitys(List<University> universitys) {
		this.universitys = universitys;
	}
}

public class University {
	String name;
	int id;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
}

<?xml version="1.0" encoding="UTF-8"?>
<zhuhai>
	<area key="1">
		<name>香洲区</name>
		<!--人口总数是2005年12月31日时的数据,单位:万-->
		<population>40</population>
		<universities>
			<university id="1" name="北师大珠海分校"/>
			<university id="2" name="中山大学珠海校区"/>
			<university id="3" name="北理工珠海学院"/>
		</universities>
	</area>
	<area key="2">
		<name>金湾区</name>
		<population>11</population>
	</area>
	<area key="3">
		<name>斗门区</name>
		<population>31</population>
	</area>
</zhuhai>

一开始觉得挺混乱的,后来仔细学习以后发现还是挺简单的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值