xml序列化、pull解析XML

把一些信息保存在XML文件中

示例如下:

首先定義一個Message類,用來實例化存放xml中的數據
public class Message {
	private String body;
	private String date;
	private String address;
	private String type;
	public String getBody() {
		return body;
	}
	public void setBody(String body) {
		this.body = body;
	}
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public Message(String body, String date, String address, String type) {
		super();
		this.body = body;
		this.date = date;
		this.address = address;
		this.type = type;
	}
	
}



點擊事件,這裏面定義了XML序列化器,並定義了生成XML文件的格式
public void click(View v){
	//使用xml序列化器生成xml文件
	//1.拿到序列化器對象
	XmlSerializer xs = Xml.newSerializer();
	//2.初始化
	File file = new File("sdcard/sms2.xml");
	try {
		FileOutputStream fos = new FileOutputStream(file);
		//enconding:指定用什麼編碼生成xml文件
		xs.setOutput(fos, "utf-8");
		
		//3.開始生成xml文件
		//enconding:指定頭結點中的enconding屬性的值
		xs.startDocument("utf-8", true);
		
		xs.startTag(null, "message");
		
		for (Message sms : smsList) {
			xs.startTag(null, "sms");
			
			xs.startTag(null, "body");
			xs.text(sms.getBody() + "<body>");
			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();
	} 
}
最後的是在onCreate方法 中虛擬一些信息,讓其保存到XML文件中
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       smsList=new ArrayList<Message>();
       for(int i=0;i<10;i++){
    	   Message smsMessage=new Message("小子你好"+i, System.currentTimeMillis()+"", "125"+i+i, "1");
    	   smsList.add(smsMessage);
       }

    }

pull解析XML文件

示例代碼:
創建一個javabean類,把.xml的數據封裝進javabean對象中:
public class City {
	private String name;
	private String temp;
	private String pm;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTemp() {
		return temp;
	}
	public void setTemp(String temp) {
		this.temp = temp;
	}
	public String getPm() {
		return pm;
	}
	public void setPm(String pm) {
		this.pm = pm;
	}
	@Override
	public String toString() {
		return "City [name=" + name + ", temp=" + temp + ", pm=" + pm + "]";
	}
	
}


這是一個button的點擊事件,
public void click(View v){
	//獲取到src文件夾下的資源文件
	InputStream is = getClassLoader().getResourceAsStream("weather.xml");
	
	//拿到pull解析器對象
	XmlPullParser xp = Xml.newPullParser();
	//初始化
	try {
		xp.setInput(is, "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();
					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:
				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();
	}
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章