欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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沒(méi)有像XmlPullParser那樣提取XML事件,而是把它們推出到數(shù)據(jù)流OutputStream或Writer中。

XmlSerializer提供了很直觀的API,即使用startDocument開(kāi)始文檔,endDocument結(jié)束文檔,startTag開(kāi)始元素,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是通過(guò) XmlSerializer 類實(shí)現(xiàn)

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

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

然后,通過(guò) 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是通過(guò) XmlPullParser 類實(shí)現(xiàn)

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

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

然后,通過(guò) 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)參見(jiàn)前面博客 Android 創(chuàng)建與解析XML(二)—— Dom方式 【4、Person類】

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

相關(guān)文章

  • Android實(shí)現(xiàn)錄音監(jiān)聽(tīng)動(dòng)畫(huà)的示例代碼

    Android實(shí)現(xiàn)錄音監(jiān)聽(tīng)動(dòng)畫(huà)的示例代碼

    在很多app種內(nèi)置了語(yǔ)音助手,也存在各種動(dòng)畫(huà),這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)錄音監(jiān)聽(tīng)動(dòng)畫(huà)的示例代碼,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Flutter框架解決盒約束widget和assets里加載資產(chǎn)技術(shù)

    Flutter框架解決盒約束widget和assets里加載資產(chǎn)技術(shù)

    這篇文章主要為大家介紹了Flutter框架解決盒約束widget和assets里加載資產(chǎn)技術(shù)運(yùn)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Android Fragment多層嵌套重影問(wèn)題的解決方法

    Android Fragment多層嵌套重影問(wèn)題的解決方法

    這篇文章主要介紹了Android Fragment多層嵌套重影問(wèn)題的解決方法,從解決bug的思想,導(dǎo)致原因,原理解析等方面找出問(wèn)題所在原因,最終解決方法就可以簡(jiǎn)單了,對(duì)fragment 多層嵌套問(wèn)題感興趣的朋友一起通過(guò)本文學(xué)習(xí)吧
    2016-08-08
  • Android實(shí)現(xiàn)京東上滑效果

    Android實(shí)現(xiàn)京東上滑效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)京東上滑效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Android 使用VideoView播放MP4的簡(jiǎn)單實(shí)現(xiàn)

    Android 使用VideoView播放MP4的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了Android 使用VideoView播放MP4的簡(jiǎn)單實(shí)現(xiàn),實(shí)現(xiàn)簡(jiǎn)單的播放功能,播放手機(jī)本地的MP4文件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Android實(shí)現(xiàn)多張圖片合成加載動(dòng)畫(huà)

    Android實(shí)現(xiàn)多張圖片合成加載動(dòng)畫(huà)

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)多張圖片合成加載動(dòng)畫(huà),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Android使用音頻信息繪制動(dòng)態(tài)波紋

    Android使用音頻信息繪制動(dòng)態(tài)波紋

    這篇文章主要介紹了Android使用音頻信息繪制動(dòng)態(tài)波紋 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • 深度剖析Android Binder IPC機(jī)制

    深度剖析Android Binder IPC機(jī)制

    Android系統(tǒng)的成功離不開(kāi)其強(qiáng)大的IPC(Inter-Process Communication)機(jī)制,其中最引人注目的就是Binder,本文將深入探討B(tài)inder的技術(shù)原理,解釋其工作方式以及相關(guān)的關(guān)鍵概念
    2023-10-10
  • Android拼接實(shí)現(xiàn)動(dòng)態(tài)對(duì)象方法詳解

    Android拼接實(shí)現(xiàn)動(dòng)態(tài)對(duì)象方法詳解

    這篇文章主要為大家介紹了Android拼接實(shí)現(xiàn)動(dòng)態(tài)對(duì)象方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Android編程獲取手機(jī)屏幕分辨率大小的方法

    Android編程獲取手機(jī)屏幕分辨率大小的方法

    這篇文章主要介紹了Android編程獲取手機(jī)屏幕分辨率大小的方法,涉及Android基于getWindowManager()方法獲取手機(jī)屏幕相關(guān)信息的使用技巧,需要的朋友可以參考下
    2016-02-02

最新評(píng)論