Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> xml的生成與解析_老師筆記,xml解析老師筆記

xml的生成與解析_老師筆記,xml解析老師筆記

編輯:關於android開發

xml的生成與解析_老師筆記,xml解析老師筆記


使用序列化器生成一個xml文件

    //1,初始化一個xml文件的序列化器
            XmlSerializer serializer = Xml.newSerializer();
            //2.初始化序列器參數
            File file = new File(Environment.getExternalStorageDirectory(),"backup.xml");
            FileOutputStream fos = new FileOutputStream(file);
            serializer.setOutput(fos, "UTF-8");
            //3.開始寫xml文件.
            serializer.startDocument("UTF-8", true);
            serializer.startTag(null, "smss");
            for(SmsInfo info : smsInfos){
               //開始寫sms節點
                serializer.startTag(null, "sms");
                //開始寫body節點
                serializer.startTag(null, "body");
                serializer.text(info.getBody());
                //body節點結束
                serializer.endTag(null, "body"); 
                
                //開始寫address節點
                serializer.startTag(null, "address");
                serializer.text(info.getAddress());
                serializer.endTag(null, "address");
                
                //開始寫data節點
                serializer.startTag(null, "date");
                serializer.text(info.getDate()+"");
                serializer.endTag(null, "date");
                // sms節點結束
                serializer.endTag(null, "sms");
            }
            //smss根節點結束
            serializer.endTag(null, "smss");
            //xml 結束
            serializer.endDocument();
            fos.close();
            
            Toast.makeText(this, "備份短信成功", 0).show();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "備份短信失敗", 0).show();
        }


#12.使用pull解析xml格式的數據 (重要)
   
 

    public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // 設置activity顯示的布局
        setContentView(R.layout.activity_main);
        TextView tv_info = (TextView) findViewById(R.id.tv_info);
        StringBuilder sb = new StringBuilder();
        try {
            //獲取我們解析出來的天氣信息
            List<Channel> channels = WeatherService.getAllWeatherInfos(getClass().getClassLoader().getResourceAsStream("weather.xml"));
            for(Channel channel : channels){
                sb.append(channel.toString());
                sb.append("\n");
            }
            //把解析出來的天氣信息設置到textview上
            tv_info.setText(sb.toString());
        
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "解析天氣信息失敗", 0).show();
        }
        
    }

    }


---------------------------------------------------------------

      public class WeatherService {
    /**
     * 解析服務器返回的數據 獲取天氣信息
     * @param is 服務器返回的包含天氣信息的流 (xml)
     * @return
     */
    public static List<Channel> getAllWeatherInfos(InputStream is) throws Exception{
        List<Channel> channels = null;
        Channel channel = null;
        //1.獲取xml解析器
        XmlPullParser parser = Xml.newPullParser();
        //2.設置xml解析器的參數
        parser.setInput(is, "utf-8");
        //3.開始解析xml文件.
        
        int type = parser.getEventType();// 獲取當前的事件的類型 
        while (type!=XmlPullParser.END_DOCUMENT){ //需要讓pull解析器解析到文件的末尾
            switch (type) {
            case XmlPullParser.START_TAG:
                if("weather".equals(parser.getName())){//總的開始節點
                    channels = new ArrayList<Channel>(); //初始化集合
                }else if("channel".equals(parser.getName())){//某個城市的信息開始了.
                    channel = new Channel();
                    //獲取到id的屬性值
                    String id = parser.getAttributeValue(0);
                    channel.setId(Integer.parseInt(id));
                    //解析city節點
                }else if("city".equals(parser.getName())){
                    String city = parser.nextText();
                    channel.setCity(city);
                    //解析溫度節點
                }else if("temp".equals(parser.getName())){
                    String temp = parser.nextText();
                    channel.setTemp(temp);
                    //解析風力節點
                }else if("wind".equals(parser.getName())){
                    String wind = parser.nextText();
                    channel.setWind(wind);
                     //解析pm250節點
                }else if("pm250".equals(parser.getName())){
                    String pm250 = parser.nextText();
                    channel.setPm250(Integer.parseInt(pm250));
                }
                break;
            //判斷xml的結束節點
            case XmlPullParser.END_TAG:
                if("channel".equals(parser.getName())){
                    //把解析的內容加入到集合中
                    channels.add(channel);
                    channel = null;
                }
                break;
            }
            
            type = parser.next();
        }
        
        is.close();
        return channels;//把所有的頻道的集合返回回去
     }
    }

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved