通過pull解析器操作安卓的xml

來源:互聯網
上載者:User

標籤:

通過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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.