很久之前的作业,突然觉得自己学习加写出来的一个简单的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>
一开始觉得挺混乱的,后来仔细学习以后发现还是挺简单的。