android 67 產生和解析xml

來源:互聯網
上載者:User

標籤:

產生xml:

package com.itheima.createxml;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import com.itheima.createxml.domain.Message;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    List<Message> smsList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                //虛擬10條簡訊        smsList = new ArrayList<Message>();        for(int i = 0; i < 10; i++){            Message sms = new Message("小志好棒" + i, System.currentTimeMillis() + "", "138"+i+i, "1");            smsList.add(sms);        }    }    public void click(View v){        //在記憶體中把xml備份簡訊的格式拼接出來,簡訊儲存在外部,因為應用刪除後要簡訊還在。        StringBuffer sb = new StringBuffer();        sb.append("<?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?>");        sb.append("<messages>");        for (Message sms : smsList) {//拼接每一條簡訊sms            sb.append("<sms>");                        sb.append("<body>");            sb.append(sms.getBody());            sb.append("</body>");                        sb.append("<date>");            sb.append(sms.getDate());            sb.append("</date>");                        sb.append("<type>");            sb.append(sms.getType());            sb.append("</type>");                        sb.append("<address>");            sb.append(sms.getAddress());            sb.append("</address>");                        sb.append("</sms>");        }        sb.append("</messages>");                File file = new File("sdcard/sms.xml");        try {            FileOutputStream fos = new FileOutputStream(file);            fos.write(sb.toString().getBytes());            fos.close();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

產生xml:

package com.itheima.xmlserializer;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlSerializer;import com.itheima.createxml.domain.Message;import android.os.Bundle;import android.app.Activity;import android.util.Xml;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    List<Message> smsList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 虛擬10條簡訊        smsList = new ArrayList<Message>();        for (int i = 0; i < 10; i++) {            Message sms = new Message("小志好棒" + i, System.currentTimeMillis()                    + "", "138" + i + i, "1");            smsList.add(sms);        }    }    public void click(View v){        //使用xml序列化器產生xml檔案        //1.拿到序列化器對象        XmlSerializer xs = Xml.newSerializer();        //2.初始化路徑和檔案名稱,產生在sd卡中,        File file = new File("sdcard/sms2.xml");        try {            FileOutputStream fos = new FileOutputStream(file);            //enconding:指定用什麼編碼產生xml檔案,安卓預設就是utf-8,所以幾乎所有的編碼都是utf-8,            xs.setOutput(fos, "utf-8");                        //utf-8指定頭結點<message>中的enconding的值enconding="utf-8",true指定是否是獨立的xml檔案,            xs.startDocument("utf-8", true);                        xs.startTag(null, "message");//開始節點的名字<message>,null為namespace,                        for (Message sms : smsList) {                xs.startTag(null, "sms");                                xs.startTag(null, "body");                xs.text(sms.getBody() + "<body>");//text表示文本節點                xs.endTag(null, "body");                                xs.startTag(null, "date");                xs.text(sms.getDate());                xs.endTag(null, "date");                                xs.startTag(null, "type");                xs.text(sms.getType());                xs.endTag(null, "type");                                xs.startTag(null, "address");                xs.text(sms.getAddress());                xs.endTag(null, "address");                                xs.endTag(null, "sms");            }                        xs.endTag(null, "message");//結束節點                        //告訴序列化器,檔案產生完畢            xs.endDocument();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }     }}

解析xml:

package com.itheima.pullparser;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import com.itheima.pullparser.domain.City;import android.os.Bundle;import android.app.Activity;import android.util.Xml;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    List<City> cityList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void click(View v){        //擷取到src檔案夾下的資源檔        InputStream is = getClassLoader().getResourceAsStream("weather.xml");//擷取資源作為流                //拿到pull解析器對象        XmlPullParser xp = Xml.newPullParser();        //初始化        try {            xp.setInput(is, "gbk");//第一個是輸入資料流,gbk是解析編碼,gbk是windows的預設編碼格式,所以weather.xml的編碼格式是gbk                        //擷取當前節點的事件類型,通過事件類型的判斷,我們可以知道當前節點是什麼節點,從而確定我們應該做什麼操作            //解析是一行一行的解析的,            int type = xp.getEventType();            City city = null;            while(type != XmlPullParser.END_DOCUMENT){//文檔結束節點                //根據節點的類型,要做不同的操作                switch (type) {                case XmlPullParser.START_TAG://開始節點                    //                    擷取當前節點的名字                    if("weather".equals(xp.getName())){                        //建立city集合對象,用於存放city的javabean                        cityList = new ArrayList<City>();                    }                    else if("city".equals(xp.getName())){                        //建立city的javabean對象                        city = new City();                    }                    else if("name".equals(xp.getName())){                        String name = xp.nextText();//擷取當前節點的下一個節點的文本就是QQ,nextText並把指標移到當前節點的結束節點,                        city.setName(name);                    }                    else if("temp".equals(xp.getName())){                        //                擷取當前節點的下一個節點的文本                        String temp = xp.nextText();                        city.setTemp(temp);                    }                    else if("pm".equals(xp.getName())){                        //                擷取當前節點的下一個節點的文本                        String pm = xp.nextText();                        city.setPm(pm);                    }                    break;                case XmlPullParser.END_TAG://結束節點,<name>QQ</name>遇到</name>什麼都不做,遇到QQ文本節點什麼都不做,                    if("city".equals(xp.getName())){                        //把city的javabean放入集合中                        cityList.add(city);                    }                    break;                }                                //把指標移動到下一個節點,並返回該節點的事件類型,前一個結束節點和後一個開始節點會有一個分行符號,分行符號是一個文本節點,                type = xp.next();            }                        for (City c : cityList) {                System.out.println(c.toString());            }        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}/* <?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?><weather>    <city>        <name>QQ</name>        <temp>5</temp>        <pm>80</pm>    </city>    <city>        <name>rr</name>        <temp>-5</temp>        <pm>800</pm>    </city>    <city>        <name>????</name>        <temp>12??</temp>        <pm>60</pm>    </city></weather>*/

 

android 67 產生和解析xml

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.