Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> (Android review)XML的解析與序列化

(Android review)XML的解析與序列化

編輯:關於Android編程

 

這篇博客主要用來介紹對XML文件的操作:解析與生成。

 

Android手機內部的解析就是pull解析
官網:http://xmlpull.org/
所謂的解析,我們可以理解為:利用XML文件的內容來生成一個對象
導出生成的xml文件後不要對其格式化,否則會出異常

 

1、MainActivity

 

package com.example.xmlparsertest1;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


 

2、Person

 

package com.example.xmlparsertest1;

public class Person {

	private Integer id;
	private String name;
	private Integer age;
	
	
	public Person() {
		// TODO Auto-generated constructor stub
	}
	
	
	
	public Person(Integer id, String name, Integer age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}



	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}



	@Override
	public String toString() {
		return Person [id= + id + , name= + name + , age= + age + ];
	}
	
	
	
}


 

3、PersonService

 

package com.example.xmlparsertest1;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

public class PersonService {

	/**
	 * 解析XML文件
	 * @param in
	 * @return
	 * @throws Exception
	 */
	public List loadPersons(InputStream in) throws Exception{
		XmlPullParser parser = Xml.newPullParser();//獲取解析器
		parser.setInput(in,UTF-8);//指定輸入流、碼表
		
		ArrayList persons = new ArrayList();
		Person p = null;
		
		/**
		 * parser.getName():獲取標簽的名字
		 * parser.getAttributeValue(0): 獲取某個屬性的值
		 * parser.next(): 讓指針指向下一個標簽
		 * parser.nextText(): 獲取某個標簽的文本內容
		 */
		for(int type = parser.getEventType() ; type != XmlPullParser.END_DOCUMENT ; type = parser.next()){
			if(type == XmlPullParser.START_TAG){
				if(parser.getName().equals(person)){
					p = new Person();
					String id = parser.getAttributeValue(0);//獲取該標簽的第0個屬性的值(value)
//					String id = parser.getAttributeValue(null, id);//這樣寫也行。第一個參數是命名空間,第二個參數是屬性的名字
					p.setId(Integer.parseInt(id));
					persons.add(p);
				}else if(parser.getName().equals(name)){
					String name = parser.nextText();
					p.setName(name);
				}else if(parser.getName().equals(age)){
					String age = parser.nextText();
					p.setAge(Integer.parseInt(age));
				}
			}
		}
		
		return persons;
	}
	//生成XML文件
	public void savePersons(List persons,OutputStream out)throws Exception{
		XmlSerializer serializer = Xml.newSerializer();
		serializer.setOutput(out,UTF-8);
		
		serializer.startDocument(UTF-8, true);//開始文檔
		serializer.startTag(null, persons);//開始標簽
		
		/**
		 * serializer.startDocument(UTF-8, true);//開始文檔
		 * serializer.startTag(null, persons);//開始標簽
		 * serializer.attribute(null, id, p.getId().toString());//設置屬性
		 * serializer.text(p.getName());//設置標簽的文本內容
		 * serializer.endTag(null, persons);
		 * serializer.endDocument();
		 */
		for(Person p : persons){
			serializer.startTag(null, person);
			serializer.attribute(null, id, p.getId().toString());//設置屬性
			
			serializer.startTag(null, name);
			serializer.text(p.getName());//設置標簽的文本內容
			serializer.endTag(null, name);
			
			serializer.startTag(null, age);
			serializer.text(p.getAge().toString());
			serializer.endTag(null, age);
			
			serializer.endTag(null, person);
		}
		
		serializer.endTag(null, persons);
		serializer.endDocument();
	}
}


 

4、PersonServiceTest

 

package com.example.xmlparsertest1;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;

import android.os.Environment;
import android.test.AndroidTestCase;

public class PersonServiceTest extends AndroidTestCase {

	public void testXMLParser() throws Exception{
		PersonService service = new PersonService();
		//獲取src目錄下的資源為輸入流方法
		InputStream in = PersonServiceTest.class.getClassLoader().getResourceAsStream(persons_hjd.xml);
		List persons = service.loadPersons(in);
		
		
		for(Person p : persons){
			System.out.println( -----------> + p);
		}
		
		
//		Person p = new Person(4, hjd, 22);
//		persons.add(p);
//		
//		service.savePersons(persons, new FileOutputStream(Environment.getExternalStorageDirectory() + / + persons_hjd.xml));
	}
	
}


 

以下附上需要解析的XML文件:persons.xml

 



	
		范冰冰
		31
	
	
		林志玲
		38
	
	
		楊冪
		26
	

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved