編輯:關於Android編程
在android中處理XML可以使用三種方式:DOM、SAX、PUll,這裡我只是簡單介紹Pull方式,其他的兩個方式可以自己去找找資料。
Pull方式在我理解跟SAX原理差不多,都是不會將整個XML一次加載,而是從頭開始一部分一部分的加載,然後通過一些事件判斷節點,比如會有文檔開始/結束事件、標簽開始/結束事件等,通過判斷事件的類型及內容能夠確定當前到達的XML節點,然後構造數據。下面給出一個簡單的例子,在例子中只是使用了START_TAG事件:
package com.mxy.pull;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import com.mxy.MainActivity;
import android.util.Log;
import android.util.Xml;
public class PullParseXml {
public void PullParseXML(){
XmlPullParser parser = Xml.newPullParser();
InputStream ins = MainActivity.class.getClassLoader().getResourceAsStream("data.xml");
try {
parser.setInput(ins, "utf-8");
int type = parser.getEventType();
//設置到文檔結束的時候,退出循環
while(type != XmlPullParser.END_DOCUMENT){
String name = null;
String id = null;
switch (type) {
case XmlPullParser.START_TAG:
if("student".equals(parser.getName())){
id = parser.getAttributeValue(0);
Log.i("mxy", "student id=" + id);
}else if("name".equals(parser.getName())){
name = parser.nextText();
Log.i("mxy", "name=" + name);
}
break;
case XmlPullParser.END_TAG:
//處理TAG結束事件
break;
case XmlPullParser.TEXT:
break;
//還有其他的事件
default:
break;
}
//這句很重要,將當前的節點類型設置為下一個,以便進入下次循環
type = parser.next();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
下面簡單介紹一下構造一個XML文件,最簡單的就是我們可以使用字符串去拼接一段XML,這種方式最簡單最易理解,但是有一點很容發生錯誤。所以我們可以使用XmlSerializer來構造一個XML數據。
下面給出一個小例子,是生成一段簡單的XML,並將其保存到外部SD卡上:
/**
* Xml序列話
* 1 直接拼字符串
* 2 使用XmlSerializer進行序列話
*/
private void xmlSerializerMethod() {
XmlSerializer serializer = Xml.newSerializer();
File file = new File(Environment.getExternalStorageDirectory(),"backup.xml");
//這裡獲取的地址是/storage/sdcard/
Log.i("mxy",Environment.getExternalStorageDirectory().toString());
try {
//需要給serializer設置一個Output否則我們序列化的xml,無法取出
StringWriter writer = new StringWriter();
serializer.setOutput(writer);
FileOutputStream fos = new FileOutputStream(file);
serializer.startDocument("utf-8", true);
serializer.setOutput(fos, "utf-8");
serializer.startTag(null, "sms");
serializer.startTag(null, "name");
serializer.attribute(null, "id", "1");
serializer.text("你好");
serializer.endTag(null, "name");
serializer.endTag(null, "sms");
serializer.endDocument();
//將數據寫入到文件中
fos.write(writer.toString().getBytes());
fos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
可能我寫的不是很清楚,如果想進一步了解可以參看http://blog.csdn.net/liuhe688/article/details/6415593。
例子工程下載地址:http://download.csdn.net/detail/mengxiangyue/7020131
轉載請注明出處:http://blog.csdn.net/mengxiangyu
Android實現粒子雨效果
本文實例介紹了Android實現粒子雨效果的實現過程,分享給大家供大家參考,具體內容如下先看看效果圖:具體實現方法:1.baseview主要是設定雨滴要實現的動作,只是先
Handler消息機制完全解析(二)MessageQueue的隊列管理
關於這個隊列先說明一點,該隊列的實現既非Collection的子類,亦非Map的子類,而是Message本身。因為Message本身就是鏈表節點。隊列中的Message
Android App支付系列(二):支付寶SDK接入詳細指南(附官方支付demo)
一家移動互聯網公司,說到底,要盈利總是需要付費用戶的,自己開發支付系統對於資源有限的公司來說顯然不太明智,國內已經有多家成熟的移動支付提供商,阿裡就是其中之一。 筆者在此
Android使用surfaceView自定義抽獎大轉盤
使用surfaceView自定義抽獎大轉盤話不多說,先上效果圖完整代碼地址歡迎start實現思路以及過程1、首先了解SurfaceView的基本用法,它跟一般的View不