现在的位置: 首页 > 综合 > 正文

sax解析xml案例一

2013年10月05日 ⁄ 综合 ⁄ 共 8587字 ⁄ 字号 评论关闭

本文出自:http://www.cnblogs.com/linjiqin/archive/2011/03/11/1981076.html

student.xml文件

<?xml version="1.0" encoding="UTF-8"?> <StudentInfo> <student> <name>赵海波</name> <sex></sex> <lesson> <lessonName>Spring整合开发</lessonName> <lessonScore>85</lessonScore> </lesson> <lesson> <lessonName>轻量级J2EE应用开发</lessonName> <lessonScore>95</lessonScore> </lesson> <lesson> <lessonName>Ajax应用开发</lessonName> <lessonScore>80</lessonScore> </lesson> </student> <student> <name>程卫娜</name> <sex></sex> <lesson> <lessonName>Spring整合开发</lessonName> <lessonScore>80</lessonScore> </lesson> <lesson> <lessonName>轻量级J2EE应用开发</lessonName> <lessonScore>85</lessonScore> </lesson> <lesson> <lessonName>Ajax应用开发</lessonName> <lessonScore>90</lessonScore> </lesson> </student> </StudentInfo>

fuzhou_weather.xml文件

<?xml version="1.0" encoding="UTF-8"?> <!-- 福州的天气情况 --> <xml_api_reply version="1"> <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0"> <forecast_information> <city data="Fuzhou, Fujian" /> <postal_code data="fuzhou" /> <latitude_e6 data="" /> <longitude_e6 data="" /> <forecast_date data="2011-01-08" /> <current_date_time data="2011-01-08 23:00:00 +0000" /> <unit_system data="SI" /> </forecast_information> <current_conditions> <condition data="多云" /> <temp_f data="53" /> <temp_c data="12" /> <humidity data="湿度: 43%" /> <icon data="/ig/images/weather/mostly_cloudy.gif" /> <wind_condition data="风向: 东北、风速:1 米/秒" /> </current_conditions> <forecast_conditions> <day_of_week data="周六" /> <low data="7" /> <high data="14" /> <icon data="/ig/images/weather/chance_of_rain.gif" /> <condition data="可能有雨" /> </forecast_conditions> <forecast_conditions> <day_of_week data="周日" /> <low data="6" /> <high data="12" /> <icon data="/ig/images/weather/chance_of_rain.gif" /> <condition data="可能有雨" /> </forecast_conditions> <forecast_conditions> <day_of_week data="周一" /> <low data="5" /> <high data="10" /> <icon data="/ig/images/weather/mostly_sunny.gif" /> <condition data="晴间多云" /> </forecast_conditions> <forecast_conditions> <day_of_week data="周二" /> <low data="4" /> <high data="8" /> <icon data="/ig/images/weather/chance_of_rain.gif" /> <condition data="可能有雨" /> </forecast_conditions> </weather> </xml_api_reply>

学生Student类

package com.ljq.entity; import java.util.Set; /** * 学生信息表 * * @author jiqinlin * */ public class Student { /** 姓名 * */ private String name; /** 性别 * */ private String sex; /** 所学课程 * */ private Set<Lesson> lessons; public Student() { } public Student(String name, String sex, Set<Lesson> lessons) { this.name = name; this.sex = sex; this.lessons = lessons; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Set<Lesson> getLessons() { return lessons; } public void setLessons(Set<Lesson> lessons) { this.lessons = lessons; } }

课程Lesson类

package com.ljq.entity; /** * 课程 * * @author jiqinlin * */ public class Lesson { /** 课程名称 * */ private String lessonName; /** 课程成绩 * */ private int lessonScore; public Lesson() { } public Lesson(String lessonName, int lessonScore) { this.lessonName = lessonName; this.lessonScore = lessonScore; } public String getLessonName() { return lessonName; } public void setLessonName(String lessonName) { this.lessonName = lessonName; } public int getLessonScore() { return lessonScore; } public void setLessonScore(int lessonScore) { this.lessonScore = lessonScore; } }

当前天气信息的类Weather

package com.ljq.entity; import java.util.List; /** * 当前天气信息的类 * * @author jiqinlin * */ public class Weather { /** 城市 * */ private String city; /** 当天日期,格式为yyyy-mm-dd * */ private String forecase_date; /** 当前时间 * */ private String current_date_time; /** 现象描述 * */ private String current_condition; /** 当前干燥程度 * */ private String current_humidity; /** 当前图片地址 * */ private String current_image_url; /** 风向 * */ private String current_wind; /** 此处只能用有序的List集合,因为第一位索引表示当天的天气情况 **/ private List<Forecast> forecasts; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getForecase_date() { return forecase_date; } public void setForecase_date(String forecase_date) { this.forecase_date = forecase_date; } public String getCurrent_date_time() { return current_date_time; } public void setCurrent_date_time(String current_date_time) { this.current_date_time = current_date_time; } public String getCurrent_condition() { return current_condition; } public void setCurrent_condition(String current_condition) { this.current_condition = current_condition; } public String getCurrent_humidity() { return current_humidity; } public void setCurrent_humidity(String current_humidity) { this.current_humidity = current_humidity; } public String getCurrent_image_url() { return current_image_url; } public void setCurrent_image_url(String current_image_url) { this.current_image_url = current_image_url; } public String getCurrent_wind() { return current_wind; } public void setCurrent_wind(String current_wind) { this.current_wind = current_wind; } public List<Forecast> getForecasts() { return forecasts; } public void setForecasts(List<Forecast> forecasts) { this.forecasts = forecasts; } }

未来天气信息的类Forecast

package com.ljq.entity; /** * 未来天气信息的类 * * @author jiqinlin * */ public class Forecast { /** 星期几 * */ private String day_of_week; /** 最低温度 * */ private String low; /** 最高温度 * */ private String high; /** 图片地址 * */ private String image_url; /** 现象描述 * */ private String condition; public String getDay_of_week() { return day_of_week; } public void setDay_of_week(String day_of_week) { this.day_of_week = day_of_week; } public String getLow() { return low; } public void setLow(String low) { this.low = low; } public String getHigh() { return high; } public void setHigh(String high) { this.high = high; } public String getImage_url() { return image_url; } public void setImage_url(String image_url) { this.image_url = image_url; } public String getCondition() { return condition; } public void setCondition(String condition) { this.condition = condition; } }

StudentSax解析

package com.ljq.sax; import java.util.HashSet; import java.util.Set; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import com.ljq.entity.Lesson; import com.ljq.entity.Student; public class StudentSax extends DefaultHandler { private Lesson lesson; private Set<Lesson> lessons; private Student student; private Set<Student> students; private String preTag; @Override public void startDocument() throws SAXException { lessons = new HashSet<Lesson>(); students = new HashSet<Student>(); } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (student != null) { String data = new String(ch, start, length); if ("name".equals(preTag)) { student.setName(data); } if ("sex".equals(preTag)) { student.setSex(data); } if ("lessonName".equals(preTag)) { lesson.setLessonName(data); } if ("lessonScore".equals(preTag)) { lesson.setLessonScore(Integer.parseInt(data)); } } } @Override public void startElement(String uri, String localName, String name, Attributes attr) throws SAXException { if ("student".equals(name)) { student = new Student(); } if ("lesson".equals(name)) { lesson = new Lesson(); } preTag = name; } @Override public void endElement(String uri, String localName, String name) throws SAXException { if (student != null && "student".equals(name)) { student.setLessons(lessons); students.add(student); student = null; lessons = new HashSet<Lesson>(); } if (lesson != null && "lesson".equals(name)) { lessons.add(lesson); lesson = null; } preTag = null; } public Set<Student> getStudents() { return students; } public Set<Lesson> getLessons() { return lessons; } }

WeatherSax解析

package com.ljq.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.ljq.entity.Forecast;
import com.ljq.entity.Weather;

public class WeatherSax extends DefaultHandler {
private Weather weather;
private Forecast forecast;
private List<Forecast> forecasts;
private String preTag;

@Override
public void startDocument() throws SAXException {
weather
= new Weather();
forecasts
= new ArrayList<Forecast>();
}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {

}

@Override
public void startElement(String uri, String localName, String name,
Attributes attr)
throws SAXException {

if ("city".equals(name)) {
weather.setCity(attr.getValue(
"data")); // 等价于weather.setCity(attr.getValue("data"));
}
if ("forecast_date".equals(name)) {
weather.setForecase_date(attr.getValue(
"data"));
}
if ("current_date_time".equals(name)) {
weather.setCurrent_date_time(attr.getValue(
"data"));
}
if("current_conditions".equals(name)){
preTag
= name;
}
if ("condition".equals(name) && "current_conditions".equals(preTag)) {
weather.setCurrent_condition(attr.getValue(
"data"));
}
if ("humidity".equals(name)) {
weather.setCurrent_humidity(attr.getValue(
"data"));
}
if ("icon".equals(name) && "current_conditions".equals(preTag)) {
weather.setCurrent_image_url(attr.getValue(
"data"));
}
if ("wind_condition".equals(name)) {
weather.setCurrent_wind(attr.getValue(
"data"));
}

if ("forecast_conditions".equals(name)) {
preTag
= name; // 记录标识,用来区分相同节点的不同父节点
forecast = new Forecast();
}
if ("day_of_week".equals(name)) {
forecast.setDay_of_week(attr.getValue(
"data"));
}
if ("low".equals(name)) {
forecast.setLow(attr.getValue(
"data"));
}
if ("high".equals(name)) {
forecast.setHigh(attr.get

抱歉!评论已关闭.