• 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();
    }
    }
  • 相关阅读:
    高可用性GRE+IPSEC中心—分支
    高可用性GRE+IPSEC中心—分支
    高可用性GRE+IPSEC中心—分支
    mysql数据库移植
    mysql数据库移植
    mysql数据库移植
    mysql数据库移植
    Linux 查看进程资源--ps、top命令
    比特币底层设计剖析
    比特币的P2P网络协议
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1981076.html
Copyright © 2020-2023  润新知