sax解析xml案例

sax解析xml案例一

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.getValue( " data " )); } if ( " icon " .equals(name) && " forecast_conditions " .equals(preTag)) { forecast.setImage_url(attr.getValue( " data " )); } if ( " condition " .equals(name) && " forecast_conditions " .equals(preTag)) { forecast.setCondition(attr.getValue( " data " )); } } @Override public void endElement(String uri, String localName, String name) throws SAXException { if ( " forecast_conditions " .equals(name)) { forecasts.add(forecast); forecast = null ; } if ( " weather " .equals(name)) { weather.setForecasts(forecasts); } } public Weather getWeather() { return weather; } }
复制代码

StudentSaxTest测试类

复制代码
   
   
package com.ljq.test; import java.io.InputStream; import java.util.Set; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import com.ljq.entity.Lesson; import com.ljq.entity.Student; import com.ljq.sax.StudentSax; public class StudentSaxTest { public static void main(String[] args) throws Exception { Set < Student > students = new StudentSaxTest().parseXMLFile(); for (Student stu : students){ System.out.println( " name= " + stu.getName()); System.out.println( " sex= " + stu.getSex()); Set < Lesson > lessons = stu.getLessons(); for (Lesson lesson : lessons){ System.out.println( " LessonName = " + lesson.getLessonName()); System.out.println( " LessonScore = " + lesson.getLessonScore()); System.out.println( " --------------- " ); } System.out.println( " ========== " ); } } // 解析文档 private Set < Student > parseXMLFile() throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); InputStream is = StudentSaxTest. class .getClassLoader() .getResourceAsStream( " student.xml " ); StudentSax handle = new StudentSax(); saxParser.parse(is, handle); is.close(); return handle.getStudents(); } }
复制代码

WeatherSaxTest测试类

复制代码
   
   
package com.ljq.test; import java.io.InputStream; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import com.ljq.entity.Forecast; import com.ljq.entity.Weather; import com.ljq.sax.WeatherSax; public class WeatherSaxTest { public static void main(String[] args) throws Exception{ Weather weather = new WeatherSaxTest().readXml(); System.out.println( " city= " + weather.getCity()); System.out.println( " forecase_date= " + weather.getForecase_date()); System.out.println( " current_date_time= " + weather.getCurrent_date_time()); System.out.println( " condition= " + weather.getCurrent_condition()); System.out.println( " humidity= " + weather.getCurrent_humidity()); System.out.println( " icon= " + weather.getCurrent_image_url()); System.out.println( " wind_condition= " + weather.getCurrent_wind()); System.out.println( " =========== " ); List < Forecast > forecasts = weather.getForecasts(); for (Forecast forecast : forecasts){ System.out.println( " day_of_week= " + forecast.getDay_of_week()); System.out.println( " low= " + forecast.getLow()); System.out.println( " high= " + forecast.getHigh()); System.out.println( " icon= " + forecast.getImage_url()); System.out.println( " condition= " + forecast.getCondition()); System.out.println( " --------------- " ); } } private Weather readXml() throws Exception{ SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); InputStream is = WeatherSaxTest. class .getClassLoader().getResourceAsStream( " fuzhou_weather.xml " ); WeatherSax handle = new WeatherSax(); parser.parse(is, handle); is.close(); return handle.getWeather(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值