零、前言
xml是一種應用廣泛的標記語言,我們常見的html便是它的子集。形如:***組成的閉合標籤安卓的res目錄下的xml想必大家都是否熟悉,它們最終都是在**中被讀取並解析發揮效果的
安卓的sharedpreferences是以xml的形式儲存資料的,就連androidmanifest注意一看也是xml
可以說xml涉及到了安卓的很多方面,我們並不陌生,xml最大的好處就是解耦,容易復用和更換
pull解析.png
xml常見的三種解析方式:
解析方式
載入驅動方式
可修改?
自定義結束?
效率備註
pull解析
事件驅動否是
高安卓專有
sax解析
事件驅動否否
高無dom解析
直接全部載入是否
低解析時構建dom樹
準備的待解析xml:
一、pull解析概述<?xml version="1.0" encoding="utf-8"?>
問天劍2000
語熙華 皇刀
3000
九方玄玉
1、pull解析xml:pull是安卓內建的,基於事件觸發的解析器
pull解析器小巧輕便,解析速度快,簡單易用
主動從解析器中獲取事件,可以在滿足了需要的條件後不再獲取事件,結束解析
2、pull寫入xml:private arraylistpar***mlwithpull()
break;
case xmlpullparser.end_tag://當事件型別是終止標籤時:即
if ("weapon".equals(pullparser.getname()))
break;
}eventtype = pullparser.next();//解析下一元素,更新event
}} catch (exception e) finally catch (ioexception e) }}
return mweapons;
}
二、sax解析概述:(****** api for xml)/**
* 備份xml--當然也可以備份任意的實體類作為xml,比如簡訊,聯絡人
*/private void backupxml()
serializer.endtag("", "weapons");//標籤結束
serializer.enddocument();//文件結束
} catch (exception e) finally catch (ioexception e) }}
}
1、sax解析xmlsax解析方式會逐行地去掃瞄xml文件,當遇到標籤時會觸發解析處理器,採用事件處理的方式解析xml
優點:在讀取文件的同時即可對xml進行處理,不必等到文件載入結束,相對快捷,所以可以解析超大xml
缺點:只能用來讀取xml中資料,無法進行增刪改。
2、sax儲存xml/**
* * @return
*/private arraylistpar***mlwithsax()
mpertag = localname;
}/**解析標籤的內容的時候呼叫
** @param ch 當前文字節點的位元組陣列
* @param start 位元組開始的位置 預設 0 全部讀取
* @param length 長度
* @throws saxexception
*/@override
public void characters(char ch, int start, int length) throws saxexception else if ("atk".equals(mpertag)) else if ("user".equals(mpertag))
}/**
* 標籤解析結束呼叫
* @param uri
* @param localname
* @param qname
* @throws saxexception
*/@override
public void endelement(string uri, string localname, string qname) throws saxexception
mpertag = null;
}});
} catch (exception e) finally catch (ioexception e) }}
return mweapons;
}
三、dom解析概述:/**
* sax建立xml檔案
*/private void saxcreatexml()
handler.endelement("", "", "weapons");
//關閉document
handler.enddocument();
} catch (exception e) finally catch (ioexception e) }}
}
1、dom解析xmldom將整個xml檔案載入到記憶體中,並構建出節點樹;
應用程式可以通過遍歷節點樹的方式來解析xml檔案中的各個節點、屬性等資訊;
優點:對xml節點的新增修改等,而且解析也很方便
缺點比較耗費記憶體,解析速度也不快
2、dom儲存xml/**
* dom解析xml
* @return
*/private arraylistpar***mlwithdom() else if ("atk".equals(nodename)) else if ("user".equals(nodename)) }}
mweapons.add(mweapon);
}} catch (exception e)
return mweapons;
}
後記:捷文規範/**
* sax建立xml檔案
*/private void domcreatexml()
//為了得到xslt引擎建立物件
transforme***ctory tff = transforme***ctory.newinstance();
//建立xslt引擎物件輸出xml文件
transformer tf = tff.newtransformer();
//獲取屬性物件
properties pro = tf.getoutputproperties();
//設定編碼格式和輸出格式
pro.setproperty(outputkeys.encoding, "utf-8");
pro.setproperty(outputkeys.method, "xml");
tf.setoutputproperties(pro);
//建立資源物件
domsource source = new domsource(doc);
string path = environment.getexternalstoragedirectory().getabsolutepath()
+file.separator+"weapondom.xml";
//獲得輸出物件
streamresult result = new streamresult(new file(path));
//執行dom文件到xml檔案轉換
tf.transform(source, result);
} catch (exception e)
1.本文成長記錄及勘誤表
專案原始碼
日期備註
v0.1--無
2018-10-15
4--安卓網路程式設計之xml總匯篇
2.更多關於我
筆名qq
愛好張風捷特烈
1981462002
zdl1994328
語言我的github
我的csdn
個人**
3.宣告
1 安卓網路程式設計之獲取IP位址
關於ip 1.ip 網際協議位址 internet protocol address 2.是tcp ip協議族中網路層的協議 3.網際網路上的每乙個網路和每一台主機分配乙個邏輯位址,以此來遮蔽實體地址的差異 ipv41.ip協議第四版 2.位數為32位,即32個0,1排列組合形成的不同數值,每個數值...
網路程式設計之理論篇
網路通訊作為網際網路的技術支援,已被廣泛應用在軟體開發中,無論是web,服務端,客戶端還是桌面應用,都是必須掌握的一門技術。在軟體開發層面實現遠端資料交換的程式設計技術。要熟悉網路程式設計,首先需要學習網路協議的相關知識。什麼網路協議呢?網路協議是為網路中進行資料交換定義的規則,以實現按此規範進行傳...
網路程式設計之理論篇
網路通訊作為網際網路的技術支援,已被廣泛應用在軟體開發中,無論是web,服務端,客戶端還是桌面應用,都是必須掌握的一門技術。在軟體開發層面實現遠端資料交換的程式設計技術。複製 要熟悉網路程式設計,首先需要學習網路協議的相關知識。什麼網路協議呢?網路協議是為網路中進行資料交換定義的規則,以實現按此規範...