Android復(fù)習(xí)之旅--XML序列化和pull解析

對(duì)于XML是什么,這里就不多說(shuō)了,如果不懂可以google學(xué)習(xí)下。

xml是非常重要和常用的一種數(shù)據(jù)格式

XML序列化
步驟:

  1. 生成一個(gè)序列化器
    XmlSerializer serializer = Xml.newSerializer();
  2. 要把數(shù)據(jù)輸出到哪里,并設(shè)置編碼格式:輸出流
    serializer.setOutput(FileOutputStream, "utf-8");
  3. 通過(guò)序列化器寫(xiě)標(biāo)簽

標(biāo)簽和屬性中的第一個(gè)參數(shù)是 命名空間,一般為 null 即可

    serializer.startDocument("utf-8", true);  //開(kāi)始文檔,true表示與其他xml文件無(wú)關(guān)聯(lián)
    serializer.startTag(null, "開(kāi)始節(jié)點(diǎn)");
    serializer.attribute(null, "屬性名", "屬性值");  //屬性可寫(xiě)可不寫(xiě)
    serializer.text("節(jié)點(diǎn)的內(nèi)容");
    serializer.endTag(null, "結(jié)束節(jié)點(diǎn)");
    serializer.endDocument();   //結(jié)束文檔
  1. 關(guān)閉流

pull解析
特點(diǎn)

  • 邊導(dǎo)入邊解析,基于事件驅(qū)動(dòng)方式
  • 解析完一個(gè)節(jié)點(diǎn)后,返回該節(jié)點(diǎn)的事件類型,通過(guò)該事件類型做相應(yīng)的業(yè)務(wù)處理
  • 當(dāng)解析完一個(gè)節(jié)點(diǎn)后,它不會(huì)繼續(xù)往下解析,需要手動(dòng)指向下一個(gè)節(jié)點(diǎn),繼續(xù)解析
  • android默認(rèn)采用pull解析

步驟

  1. 先構(gòu)建一個(gè)解析器
    XmlPullParser parser = Xml.newPullParser();
  2. 設(shè)置要解析的內(nèi)容
    parser.setInput(is, "utf-8");
  3. 獲取節(jié)點(diǎn)的事件類型來(lái)解析內(nèi)容

pull的事件類型

    XmlPullParser.START_DOCUMENT:文檔開(kāi)始
    XmlPullParser.END_DOCUMENT:文檔結(jié)束
    XmlPullParser.START_TAG:開(kāi)始標(biāo)記
    XmlPullParser.END_TAG:結(jié)束標(biāo)記

解析過(guò)程

    int event = parser.getEventType();//獲取當(dāng)前節(jié)點(diǎn)的事件類型
    while(event != XmlPullParser.END_DOCUMENT) {
         switch(event) {
              case XmlPullParser.START_DOCUMENT : 
                  //TODO 一般進(jìn)行數(shù)據(jù)的初始化操作
                  break;
              case XmlPullParser.START_TAG :
                  //TODO 解析
                  String tag = parser.getName();//獲取當(dāng)前節(jié)點(diǎn)的標(biāo)記
                  parser.getAttributeValue(0);//獲取當(dāng)前節(jié)點(diǎn)的第一個(gè)屬性值
                  String text = parser.nextText();//獲得當(dāng)前里的文本內(nèi)容
                  break;
              case XmlPullParser.END_TAG:
                  //TODO 將數(shù)據(jù)進(jìn)行保存操作
                  break;
         }
         event = parser.next(); //指向下一個(gè)節(jié)點(diǎn)
    }

案例

詳情請(qǐng)看我在GitHub上的demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容