標籤:
產生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