最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 創(chuàng)建與解析XML(四)——詳解Pull方式

 更新時(shí)間:2016年11月29日 15:57:48   作者:陽(yáng)光島主  
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Pull方式,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。

 1、Pull概述

Android系統(tǒng)中和創(chuàng)建XML相關(guān)的包為org.xmlpull.v1,在這個(gè)包中不僅提供了用于創(chuàng)建XML的 XmlSerializer,還提供了用來(lái)解析XML的Pull方式解析器 XmlPullParser

XmlSerializer沒有像XmlPullParser那樣提取XML事件,而是把它們推出到數(shù)據(jù)流OutputStream或Writer中。

XmlSerializer提供了很直觀的API,即使用startDocument開始文檔,endDocument結(jié)束文檔,startTag開始元素,endTag結(jié)束元素,text添加文本等。

Pull方式創(chuàng)建XML,應(yīng)用了標(biāo)準(zhǔn)xml構(gòu)造器 org.xmlpull.v1.XmlSerializer來(lái)創(chuàng)建 XML ,org.xmlpull.v1.XmlPullParser來(lái)解析XML,需要導(dǎo)入以下內(nèi)容

org.xmlpull.v1

  • org.xmlpull.v1.XmlPullParser;
  • org.xmlpull.v1.XmlPullParserException;
  • org.xmlpull.v1.XmlPullParserFactory;
  • org.xmlpull.v1.XmlSerializer;

Pull 創(chuàng)建和解析 XML 的效果圖:

2、Pull 創(chuàng)建 XML

pull方式,創(chuàng)建xml是通過 XmlSerializer 類實(shí)現(xiàn)

首先,通過XmlSerializer得到創(chuàng)建xml的實(shí)例 xmlSerializer

接著,通過 xmlSerializer 設(shè)置輸出 xmlSerializer.setOutput,xmlSerializer.startDocument("utf-8", null)設(shè)置xml屬性等

然后,通過 xmlSerializer 創(chuàng)建 startDocument、startTag、text、endTag、endDocument等

 /** Pull方式,創(chuàng)建 XML */ 
  public String pullXMLCreate(){ 
    StringWriter xmlWriter = new StringWriter(); 
 
    Person []persons = new Person[3];    // 創(chuàng)建節(jié)點(diǎn)Person對(duì)象 
    persons[0] = new Person(1, "sunboy_2050", "http://blogcsdnnet/sunboy_2050"); 
    persons[1] = new Person(2, "baidu", "http://wwwbaiducom"); 
    persons[2] = new Person(3, "google", "http://wwwgooglecom"); 
     
    try { 
//     // 方式一:使用Android提供的實(shí)用工具類androidutilXml 
//     XmlSerializer xmlSerializer = XmlnewSerializer();    
       
      // 方式二:使用工廠類XmlPullParserFactory的方式 
      XmlPullParserFactory factory = XmlPullParserFactorynewInstance(); 
      XmlSerializer xmlSerializer = factorynewSerializer(); 
       
      xmlSerializersetOutput(xmlWriter);       // 保存創(chuàng)建的xml 
       
      xmlSerializersetFeature("http://xmlpullorg/v1/doc/featureshtml#indent-output", true); 
//     xmlSerializersetProperty("http://xmlpullorg/v1/doc/propertieshtml#serializer-indentation", " ");     // 設(shè)置屬性 
//     xmlSerializersetProperty("http://xmlpullorg/v1/doc/propertieshtml#serializer-line-separator", "\n"); 
      xmlSerializerstartDocument("utf-8", null);   // <?xml version='0' encoding='UTF-8' standalone='yes' ?>  
       
      xmlSerializerstartTag("", "root"); 
      xmlSerializerattribute("", "author", "homer"); 
      xmlSerializerattribute("", "date", "2012-04-28"); 
       
      int personsLen = personslength; 
      for(int i=0; i<personsLen; i++) { 
        xmlSerializerstartTag("", "person");    // 創(chuàng)建person節(jié)點(diǎn) 
         
        xmlSerializerstartTag("", "id"); 
        xmlSerializertext(persons[i]getId()+""); 
        xmlSerializerendTag("", "id"); 
 
        xmlSerializerstartTag("", "name"); 
        xmlSerializertext(persons[i]getName()); 
        xmlSerializerendTag("", "name"); 
 
        xmlSerializerstartTag("", "blog"); 
        xmlSerializertext(persons[i]getBlog()); 
        xmlSerializerendTag("", "blog"); 
         
        xmlSerializerendTag("", "person"); 
      } 
       
      xmlSerializerendTag("", "root"); 
      xmlSerializerendDocument(); 
       
    } catch (XmlPullParserException e) {    // XmlPullParserFactorynewInstance 
      eprintStackTrace(); 
    } catch (IllegalArgumentException e) {   // xmlSerializersetOutput 
      eprintStackTrace(); 
    } catch (IllegalStateException e) {     // xmlSerializersetOutput 
      eprintStackTrace(); 
    } catch (IOException e) {    // xmlSerializersetOutput 
      eprintStackTrace(); 
    } catch (Exception e) { 
      eprintStackTrace(); 
    } 
     
    savedXML(fileName, xmlWritertoString()); 
    return xmlWritertoString(); 
  } 

運(yùn)行結(jié)果:

3、Pull 解析 XML

pull方式,解析xml是通過 XmlPullParser 類實(shí)現(xiàn)

首先,通過XmlPullParser得到解析xml的實(shí)例 xpp

接著,通過 xpp設(shè)置輸入 xpp.setInput(is, "utf-8"),聲明定義保存xml信息的數(shù)據(jù)結(jié)構(gòu)(如:Person數(shù)組)

然后,通過 xpp 解析 START_DOCUMENT、START_TAG、TEXT、END_TAG、END_DOCUMENT等
  

 /** Pull方式,解析 XML */ 
  public String pullXMLResolve(){ 
    StringWriter xmlWriter = new StringWriter(); 
     
    InputStream is = readXML(fileName); 
    try { 
//     // 方式一:使用Android提供的實(shí)用工具類androidutilXml 
//     XmlPullParser xpp = XmlnewPullParser(); 
       
      // 方式二:使用工廠類XmlPullParserFactory的方式 
      XmlPullParserFactory factory = XmlPullParserFactorynewInstance(); 
      XmlPullParser xpp = factorynewPullParser(); 
       
      xppsetInput(is, "utf-8"); 
       
      List<Person> personsList = null;   // 保存xml的person節(jié)點(diǎn) 
      Person person = null; 
      StringBuffer xmlHeader = null;     // 保存xml頭部 
      String ele = null;   // Element flag 
       
      int eventType = xppgetEventType(); 
      while(XmlPullParserEND_DOCUMENT != eventType) { 
        switch (eventType) { 
        case XmlPullParserSTART_DOCUMENT: 
          personsList = new ArrayList<Person>();    // 初始化persons 
          xmlHeader = new StringBuffer();       // 初始化xmlHeader 
          break; 
           
        case XmlPullParserSTART_TAG: 
          if("root"equals(xppgetName())) { 
            String attrAuthor = xppgetAttributeValue(0); 
            String attrDate = xppgetAttributeValue(1); 
            xmlHeaderappend("root")append("\t\t"); 
            xmlHeaderappend(attrAuthor)append("\t"); 
            xmlHeaderappend(attrDate)append("\n"); 
          } else if("person"equals(xppgetName())) { 
            person = new Person();     // 創(chuàng)建person實(shí)例 
          } else if("id"equals(xppgetName())) { 
            ele = "id"; 
          } else if("name"equals(xppgetName())) { 
            ele = "name"; 
          } else if("blog"equals(xppgetName())) { 
            ele = "blog"; 
          } else { 
            ele = null; 
          } 
          break; 
           
        case XmlPullParserTEXT: 
          if(null != ele) { 
            if("id"equals(ele)) { 
              personsetId(IntegerparseInt(xppgetText())); 
            } else if("name"equals(ele)) { 
              personsetName(xppgetText()); 
            } else if("blog"equals(ele)) { 
              personsetBlog(xppgetText()); 
            } 
          } 
          break; 
           
        case XmlPullParserEND_TAG: 
          if("person"equals(xppgetName())){ 
            personsListadd(person); 
            person = null; 
          } 
          ele = null; 
          break; 
        } 
         
        eventType = xppnext();   // 下一個(gè)事件類型 
      } 
       
      xmlWriterappend(xmlHeader); 
      int personsLen = personsListsize(); 
      for(int i=0; i<personsLen; i++) { 
        xmlWriterappend(personsListget(i)toString()); 
      } 
       
    } catch (XmlPullParserException e) {    // XmlPullParserFactorynewInstance 
      eprintStackTrace(); 
    } catch (Exception e) { 
      eprintStackTrace(); 
    } 
     
    return xmlWritertoString();     
  } 

運(yùn)行結(jié)果:

4、Person類

請(qǐng)參見前面博客 Android 創(chuàng)建與解析XML(二)—— Dom方式 【4、Person類】

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

苍溪县| 大关县| 乌鲁木齐县| 九龙县| 彭水| 阿克苏市| 桐城市| 河曲县| 彝良县| 商洛市| 新营市| 北碚区| 沈阳市| 平江县| 池州市| 永昌县| 清镇市| 和田市| 新民市| 铜山县| 凯里市| 射阳县| 临沧市| 鹤壁市| 湾仔区| 肇东市| 中超| 兴安县| 佛冈县| 永济市| 泾川县| 民乐县| 枞阳县| 沂南县| 丰镇市| 河北区| 军事| 蓝山县| 萨迦县| 台山市| 温宿县|