SAX căn bản – phân tích XML (dữ liệu thời tiết trực tuyến)


Ví dụ sử dụng SAX phân tích nội dung XML trực tuyến (thông tin dự báo thời tiết)
Nội dung XML
Snap 2015-09-11 at 16.27.57
Nội dung hiện thị sau phân tích
Snap 2015-09-11 at 16.28.14
Mã nguồn ví dụ

package codes;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
 * @author ntdan
 */
public class SAXParser_RSS extends DefaultHandler {
    String urlPath = "http://api.openweathermap.org/data/2.5/forecast?q=can+tho,vn&mode=xml";
    String strresult = "";
    int count = 1;
    boolean namefound = false;
    boolean itemfound = false;

    public String parse() {
        try {
            SAXParserFactory fac = SAXParserFactory.newInstance();
            SAXParser sax = fac.newSAXParser();
            // ket noi truc tiep
            URL url = new URL(urlPath);
            URLConnection conn = url.openConnection();
            InputSource in = new InputSource(conn.getInputStream());
            // phan tich tu luon truc tuyen
            sax.parse(in, this);
            return strresult;
        } catch (ParserConfigurationException ex) {
            Logger.getLogger(SAXParser_RSS.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SAXException ex) {
            Logger.getLogger(SAXParser_RSS.class.getName()).log(Level.SEVERE, null, ex);
        } catch (MalformedURLException ex) {
            Logger.getLogger(SAXParser_RSS.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(SAXParser_RSS.class.getName()).log(Level.SEVERE, null, ex);
        }
        return strresult;
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length); //To change body of generated methods, choose Tools | Templates.

        if (namefound) {
            strresult += "<b>Location</b>: " + new String(ch, start, length) + "!<br/>";
            namefound = false;
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName); //To change body of generated methods, choose Tools | Templates.

        if (qName.equalsIgnoreCase("item")) {
            strresult += "<br/>";
            itemfound = false;
        }
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes); //To change body of generated methods, choose Tools | Templates.
        if (qName.equalsIgnoreCase("name")) {
            namefound = true;
        }

        if (qName.equalsIgnoreCase("item")) {
            itemfound = true;
        }

        if (qName.equalsIgnoreCase("time")) {
            strresult += count++ + ". <i>Time<i> <b>From</b>: " + attributes.getValue("from")
                    + " <b>To</b>: " + attributes.getValue("to");
        }

        if (qName.equalsIgnoreCase("humidity")) {
            strresult += " <i>Humidity</i>: " + attributes.getValue("value")
                    + attributes.getValue("unit") + "<br/>";
        }

        if (qName.equalsIgnoreCase("temperature")) {
            strresult += " <b>Temperature</b>: <b>from</b> "
                    + attributes.getValue("min") + " <b>to</b> "
                    + attributes.getValue("max") + "-"
                    + attributes.getValue("unit");
        }
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument(); //To change body of generated methods, choose Tools | Templates.
        strresult += "<br/>End parsing ...";
    }

    @Override
    public void startDocument() throws SAXException {
        super.startDocument(); //To change body of generated methods, choose Tools | Templates.
        strresult += "Start parsing ... <br/>";
    }
}

goodluck!!!

Advertisements

Phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s