안 드 로 이 드 가 XML 파일 을 분석 하 는 세 가지 방법의 Pull(읽 기와 쓰기)

4696 단어 android
SAX 와 DOM 으로 XML 파일 을 해석 할 수 있 는 것 외 에 도 안 드 로 이 드 에 내 장 된 Pull 해상도 기 를 이용 해 XML 파일 을 해석 할 수 있다.Pull 해상도 기 는 SAX 해상도 기와 비슷 하 게 작 동 합 니 다.이것 은 유사 한 이 벤트 를 제공 합 니 다.예 를 들 어 시작 요소 와 끝 요소 이 벤트 는 parser.next()를 사용 하면 다음 요소 에 들 어가 서 해당 이 벤트 를 촉발 할 수 있 습 니 다.이 벤트 는 수치 코드 로 전송 되 므 로 관심 있 는 이 벤트 를 switch 로 처리 할 수 있 습 니 다.요소 가 분석 되 기 시 작 했 을 때 parser.nextText()방법 을 사용 하면 다음 Text 형식 노드 의 값 을 얻 을 수 있 습 니 다.1:
package cn.itcast.service;

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

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

import android.util.Xml;

import cn.itcast.domain.Person;
/**
 *   Pull  XML  
 */
public class PULLPersonService {
	
	public static void save(List<Person> persons, Writer writer) throws Throwable{
		XmlSerializer serializer = Xml.newSerializer();
		serializer.setOutput(writer);
		serializer.startDocument("UTF-8", true);
		
		serializer.startTag(null, "persons");
		for(Person person : persons){
			serializer.startTag(null, "person");
			serializer.attribute(null, "id", person.getId().toString());
			
			serializer.startTag(null, "name");
			serializer.text(person.getName());
			serializer.endTag(null, "name");
			
			serializer.startTag(null, "age");
			serializer.text(person.getAge().toString());
			serializer.endTag(null, "age");
			
			serializer.endTag(null, "person");
		}
		serializer.endTag(null, "persons");		
		serializer.endDocument();
		writer.flush();
		writer.close();
	}

	public static List<Person> getPersons(InputStream inStream) throws Throwable{
		List<Person> persons = null;
		Person person = null;
		XmlPullParser parser = Xml.newPullParser();
		parser.setInput(inStream, "UTF-8");
		int eventType = parser.getEventType();//       
		while(eventType!=XmlPullParser.END_DOCUMENT){//          
			switch (eventType) {
			case XmlPullParser.START_DOCUMENT:
				persons = new ArrayList<Person>();
				break;
	
			case XmlPullParser.START_TAG:
				String name = parser.getName();//               
				if("person".equals(name)){
					person = new Person();
					person.setId(new Integer(parser.getAttributeValue(0)));
				}
				if(person!=null){
					if("name".equals(name)){
						person.setName(parser.nextText());//                     
					}
					if("age".equals(name)){
						person.setAge(new Short(parser.nextText()));
					}
				}
				break;
				
			case XmlPullParser.END_TAG:
				if("person".equals(parser.getName())){
					persons.add(person);
					person = null;
				}
				break;
			}
			eventType = parser.next();
		}
		return persons;
	}
}

 2:테스트 Pull XML 파일 분석 및 XML 파일 저장
public void testPullGetPersons() throws Throwable{
		InputStream inStream = getClass().getClassLoader().getResourceAsStream("itcast.xml");
		List<Person> persons = PULLPersonService.getPersons(inStream);
		for(Person person : persons){
			Log.i(TAG, person.toString());
		}
	}
	
	public void testSave() throws Throwable{
		//File file = new File(this.getContext().getFilesDir(), "person.xml");
		//FileOutputStream outStream = new FileOutputStream(file);
		List<Person> persons = new ArrayList<Person>();
		persons.add(new Person(34, "lili", (short)12));
		persons.add(new Person(56, "  ", (short)32));
		persons.add(new Person(39, "  ", (short)40));
		/*FileOutputStream outStream = this.getContext().openFileOutput("person.xml", Context.MODE_PRIVATE);
		OutputStreamWriter writer = new OutputStreamWriter(outStream, "UTF-8");
		BufferedWriter bWriter = new BufferedWriter(writer);
		*/
		StringWriter writer = new StringWriter();
		PULLPersonService.save(persons, writer);
		Log.i(TAG, writer.toString());
	}

  
 참고 가능:http://www.cnblogs.com/zhangdongzi/archive/2011/04/15/2016828.html

좋은 웹페이지 즐겨찾기