<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    歡迎使用我的 在線工具

    小D

    讀歷史、看小說(shuō)、寫程序都是我所愛。技術(shù)不好,頭腦不靈光,靠的是興趣。
    隨筆 - 35, 文章 - 25, 評(píng)論 - 13, 引用 - 0
    數(shù)據(jù)加載中……

    Android中使用SAX來(lái)解析XML

        在Java中使用SAX來(lái)解析XML,這樣好像耗內(nèi)存會(huì)比DOM方式少些,適合于手持設(shè)備上的XML處理。
        用SAX處理以下XML文件:
      
     1<?xml version="1.0" encoding="UTF-8"?>
     2<citys>
     3<city name="上海"><long>121480000</long><lat>31220000</lat></city>
     4<city name="嘉定"><long>121240000</long><lat>31400000</lat></city>
     5<city name="寶山"><long>121480000</long><lat>31410000</lat></city>
     6<city name="川沙"><long>121700000</long><lat>31190000</lat></city>
     7<city name="南匯"><long>121760000</long><lat>31050000</lat></city>
     8<city name="奉賢"><long>121460000</long><lat>30920000</lat></city>
     9<city name="松江"><long>121240000</long><lat>31000000</lat></city>
    10<city name="金山"><long>121160000</long><lat>30890000</lat></city>
    11<city name="青浦"><long>121100000</long><lat>31150000</lat></city>
    12<city name="崇明"><long>121400000</long><lat>31730000</lat></city>
    13</citys>
    14
        這里用查詢指定城市的坐標(biāo)信息:
       
      1package sax.test;
      2
      3import java.io.IOException;
      4
      5import javax.xml.parsers.SAXParser;
      6import javax.xml.parsers.SAXParserFactory;
      7
      8import org.xml.sax.Attributes;
      9import org.xml.sax.InputSource;
     10import org.xml.sax.SAXException;
     11import org.xml.sax.XMLReader;
     12import org.xml.sax.helpers.DefaultHandler;
     13
     14
     15public class CityInfoHandler extends DefaultHandler {
     16    private static  CityInfoHandler instance = new CityInfoHandler();
     17    private String tarName = "";
     18    private String subTarName = "";
     19    private String cityName = "";
     20    private LatAndLong latAndLong = null;
     21    
     22
     23    public LatAndLong getLatAndLong() {
     24        tarName = "";
     25        cityName = "";
     26        return latAndLong;
     27    }

     28
     29    public void setCityName(String cityName) {
     30        this.cityName = cityName;
     31    }

     32
     33    @Override
     34    public void startDocument() throws SAXException {
     35        latAndLong = new LatAndLong();
     36    }

     37    
     38    @Override
     39    public void startElement(String uri, String localName, String qName,
     40            Attributes atts) throws SAXException {
     41        System.out.println("qName = "+ qName);
     42        System.out.println("localName = " + localName);
     43        if ("city".equals(qName)) {
     44            String cname = atts.getValue("name");
     45            if(cname.equalsIgnoreCase(cityName)){
     46                tarName = qName;
     47            }

     48        }

     49        
     50        if("long".equals(qName) || "lat".equals(qName)){
     51            subTarName = qName;
     52        }

     53        
     54    }

     55
     56    @Override
     57    public void characters(char[] ch, int start, int length)
     58            throws SAXException {
     59        // 錕斤拷錕斤拷錕介到錕斤拷
     60        if(tarName != "" && tarName.length() > 0 && tarName.equals("city")){
     61            String text = new String(ch, start, length);
     62            
     63            if("long".equals(subTarName)){
     64                latAndLong.setAlong(text);
     65            }
    else if("lat".equals(subTarName)){
     66                latAndLong.setAlat(text);
     67            }

     68            
     69            if(latAndLong.isOk()){
     70                tarName = "";
     71                cityName = "";
     72            }

     73            
     74        }

     75        
     76        subTarName = "";
     77        
     78    }

     79    
     80    
     81    
     82    public static LatAndLong queryLatAndLong(String cityName){
     83        try {
     84            instance.setCityName(cityName);
     85            SAXParserFactory factory = SAXParserFactory.newInstance();
     86            SAXParser parser = factory.newSAXParser();
     87            XMLReader xr = parser.getXMLReader();
     88            
     89            xr.setContentHandler(instance);    
     90            
     91            xr.parse(new InputSource(ClassLoader.getSystemResourceAsStream("city.xml")));
     92            return instance.getLatAndLong();
     93        }
     catch (IOException e) {
     94            e.printStackTrace();
     95        }
     catch (SAXException e) {
     96            e.printStackTrace();
     97        }
     catch (Exception e) {
     98            e.printStackTrace();
     99        }

    100        
    101        return null;
    102        
    103    }

    104    
    105    public static void main(String[] args) {
    106        LatAndLong ll = queryLatAndLong("上海");
    107        System.out.println(ll.getAlat() + "," + ll.getAlong());
    108    }

    109}

    110
        
     1package sax.test;
     2
     3/**
     4 * 經(jīng)緯度
     5 * 
     6 * @author vaga
     7 * 
     8 */

     9public class LatAndLong {
    10    private String alat = null;
    11    private String along = null;
    12    
    13    private boolean isOk = false;
    14
    15    public boolean isOk() {
    16        return isOk;
    17    }

    18
    19    public String getAlat() {
    20        return alat;
    21    }

    22
    23    public void setAlat(String alat) {
    24        this.alat = alat;
    25        if(this.alat != null && this.along != null){
    26            isOk = true;
    27        }

    28    }

    29
    30    public String getAlong() {
    31        return along;
    32    }

    33
    34    public void setAlong(String along) {
    35        this.along = along;
    36        if(this.alat != null && this.along != null){
    37            isOk = true;
    38        }

    39    }

    40
    41}

    42
         這里需要注意的是 public void startElement(String uri, String localName, String qName,Attributes atts) ,這個(gè)方法的參數(shù)localName和qName,localName是不加Namespace前綴的標(biāo)簽名,而qName是加Namespace前綴的,如果沒有指定Namespace,則qName可能為空,當(dāng)然不同的SAX實(shí)現(xiàn)會(huì)有所不同,比如在Android中qName為空,而J2SE中l(wèi)ocalName為空,所以想要總是得到標(biāo)簽名,就需要檢查這兩個(gè)參數(shù)的值了。
         最后,得到城市的經(jīng)緯度坐標(biāo),可以用經(jīng)緯度來(lái)在Google Weather API中查詢天氣情況。這里有一個(gè)根據(jù)輸入的中文城市名來(lái)查詢天氣的Android實(shí)現(xiàn),是從《Android應(yīng)用開發(fā)揭秘》的示例程序改的。

    點(diǎn)擊下載

    posted on 2011-04-17 13:40 vagasnail 閱讀(2661) 評(píng)論(4)  編輯  收藏 所屬分類: javaAndroid

    評(píng)論

    # re: Android中使用SAX來(lái)解析XML  回復(fù)  更多評(píng)論   

    getSystemResourceAsStream() 這個(gè)里面的city.xml是放在那里的?謝謝。
    2012-02-12 12:03 | daidi

    # re: Android中使用SAX來(lái)解析XML  回復(fù)  更多評(píng)論   

    @daidi
    assets目錄下面的
    2012-02-12 18:22 | vagasnail

    # re: Android中使用SAX來(lái)解析XML  回復(fù)  更多評(píng)論   

    代碼中不寫點(diǎn)注釋和費(fèi)了沒什么區(qū)別!!
    2013-08-27 22:49 | 小小菜

    # re: Android中使用SAX來(lái)解析XML  回復(fù)  更多評(píng)論   

    @小小菜
    本來(lái)無(wú)所謂廢了就廢了,而且這么簡(jiǎn)單,而且我也加了兩條注釋
    2013-09-05 11:38 | vagasnail
    主站蜘蛛池模板: 最近免费中文字幕高清大全 | 91成人免费在线视频| 亚洲精品无码专区在线在线播放 | 无码日韩人妻av一区免费| 亚洲另类古典武侠| 久久久久久国产精品免费免费| 亚洲人妖女同在线播放| 国产片AV片永久免费观看| 狠狠色伊人亚洲综合网站色| 毛片大全免费观看| 亚洲AV永久无码精品放毛片| 免费一级毛片不卡不收费| h视频在线免费观看| 亚洲av无码国产精品夜色午夜| 久久国产高潮流白浆免费观看 | 久久精品国产亚洲AV香蕉| 嫖丰满老熟妇AAAA片免费看| 亚洲熟伦熟女专区hd高清| 国产jizzjizz视频全部免费| 一本一道dvd在线观看免费视频| 亚洲人成网站在线观看播放| 免费A级毛片av无码| 在线精品亚洲一区二区| 无码不卡亚洲成?人片| 特级无码毛片免费视频尤物| 亚洲六月丁香六月婷婷色伊人| 国产zzjjzzjj视频全免费| 国产拍拍拍无码视频免费| 亚洲精品第一国产综合野| 免费在线看片网站| 97在线视频免费| 久久亚洲精品无码av| 好看的电影网站亚洲一区| a毛片基地免费全部视频| 亚美影视免费在线观看| 亚洲成av人片不卡无码| 亚洲?V乱码久久精品蜜桃| 鲁大师在线影院免费观看| 国产亚洲日韩在线a不卡| 亚洲精品视频在线观看免费| 国产福利免费观看|