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();
	}
}




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