對(duì)于XML是什么,這里就不多說(shuō)了鸣哀,如果不懂可以google學(xué)習(xí)下。
xml是非常重要和常用的一種數(shù)據(jù)格式
XML序列化
步驟:
- 生成一個(gè)序列化器
XmlSerializer serializer = Xml.newSerializer(); - 要把數(shù)據(jù)輸出到哪里灭抑,并設(shè)置編碼格式:輸出流
serializer.setOutput(FileOutputStream, "utf-8"); - 通過(guò)序列化器寫標(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, "屬性名", "屬性值"); //屬性可寫可不寫
serializer.text("節(jié)點(diǎn)的內(nèi)容");
serializer.endTag(null, "結(jié)束節(jié)點(diǎn)");
serializer.endDocument(); //結(jié)束文檔
- 關(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解析
步驟
- 先構(gòu)建一個(gè)解析器
XmlPullParser parser = Xml.newPullParser(); - 設(shè)置要解析的內(nèi)容
parser.setInput(is, "utf-8"); - 獲取節(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