標籤:
通過pull解析器操作安卓的xml
例子定義了一個javabean用於存放上面解析出來的xml內容, 這個javabean為Person,代碼請見本頁下面備忘:
==============================================================================================
使用pull解析器解析person.xml檔案
public class PersonService {
public static List getPersons(InputStream xml) throws Exception{ //接收一個xml檔案對象
List persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser(); //利用Android的Xml工具類擷取xmlPull解析器
parser.setInput(xml, "UTF-8"); //解析檔案,設定字元集
int event = parser.getEventType(); //擷取解析狀態,返回的是int型數字狀態
while(event != XmlPullParser.END_DOCUMENT){ //如果狀態不是結束事件END_DOCUMENT,就遞迴
switch (event) {
case XmlPullParser.START_DOCUMENT: //如果為開始解析頭標籤START_DOCUMENT,初始化資料
persons = new ArrayList();
break;
case XmlPullParser.START_TAG: //如果為開始解析屬性START_TAG,則擷取資料
if("person".equals(parser.getName())){ //如果屬性名稱為制定名稱則根據屬性索引值擷取資料
Integer personid = new Integer(parser.getAttributeValue(0));
person = new Person(); //建立對象封裝屬性
person.setId(personid);
}else if("name".equals(parser.getName())){
person.setName(parser.nextText()); //如果要擷取的資料在text中則調用nextText()方法擷取
}else if("age".equals(parser.getName())){
person.setAge(new Short(parser.nextText()));
}
break;
case XmlPullParser.END_TAG: //當觸發xml文檔結束事件的名稱為person(即解析結束位置),將封裝對象放入集合,再將對象制空
if("person".equals(parser.getName())){
persons.add(person);
person = null;
}
break;
}
event = parser.next(); //讓指標指向下一個節點
}
return persons;
}
*************************************************************************
通過pull接續器建立xml文檔
public static void save(List persons, OutputStream outStream) throws Exception{
XmlSerializer serializer = Xml.newSerializer(); //建立xml的序列化檔案
serializer.setOutput(outStream, "UTF-8"); //傳入儲存的輸出資料流,和字元集編碼
serializer.startDocument("UTF-8", true); //xml頭標籤字元集設定,是否序列化
serializer.startTag(null, "persons"); //開始節點設定,(命名空間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(); //結束xml編輯,即設定xml文檔結尾
outStream.flush(); //最好先將緩衝中資料刷出再關閉輸出資料流以防傳入的流是緩衝流
outStream.close();
}
}
通過pull解析器操作安卓的xml