欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Xml格式數(shù)據(jù)如何生成和解析-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“Xml格式數(shù)據(jù)如何生成和解析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Xml格式數(shù)據(jù)如何生成和解析”這篇文章吧。

公司主營(yíng)業(yè)務(wù):網(wǎng)站制作、成都做網(wǎng)站、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出鐘樓免費(fèi)做網(wǎng)站回饋大家。

1. Xml格式數(shù)據(jù)的生成和解析

使用xml 作為數(shù)據(jù)交互的載體是Android中非常重要的功能,比如天氣預(yù)報(bào)數(shù)據(jù)、短信備份數(shù)據(jù)、訊錄數(shù)據(jù)都可以以xml

的格式通過(guò)網(wǎng)絡(luò)傳輸。

XML的格式通過(guò)便簽的形式書(shū)寫和展示,一目了然,方便閱讀和識(shí)別,如下所示:

<xml 頭>
<student>
<name>張三</name>
<number>110001</number>
<sex>male</sex>
</student>

XML的生成

如果用java代碼去實(shí)現(xiàn)這樣的一個(gè)字符串格式,可以使用到StringBuilder來(lái)進(jìn)行組拼:StringBuilder sb = new StringBuilder();

//數(shù)據(jù)保存到文件
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sb.append("<student>");
sb.append("<name>");
sb.append(name);
sb.append("</name>");
sb.append("<number>");
sb.append(number);
sb.append("</number>");
sb.append("<sex>");
sb.append(sex);
sb.append("</sex>");
sb.append("</student>");

上面的代碼雖然也可以生成xml

文件,但是無(wú)法對(duì)特殊字符進(jìn)行處理,比如如果短信內(nèi)容包含“</>”符號(hào),那么xml

解析器就無(wú)法完成正確的解析。因此使用的前提是你確定數(shù)據(jù)內(nèi)容沒(méi)有特殊字符。

而Android為我們提供了一個(gè)專門用于生成XML數(shù)據(jù)的API:XmlSerializer, 該api

內(nèi)部已經(jīng)實(shí)現(xiàn)了對(duì)特殊字符的處理,代碼如下:

try {//
采用Android的api面向?qū)ο蟮纳蓌ml文件.
// 1.得到xml文件的序列化器
XmlSerializer serializer = Xml.newSerializer();
// 2.指定序列化器的一些初始參數(shù)
File file = new File(getFilesDir(), name +".xml");
FileOutputStream os = new FileOutputStream(file);serializer.setOutput(os,
"utf-8");
// 3.寫xml文件.
serializer.startDocument("utf-8",
true);//寫開(kāi)頭serializer.startTag(null,
"student");//開(kāi)始標(biāo)簽
serializer.startTag(null,"name");
serializer.text(name);//文本標(biāo)簽
serializer.endTag(null,"name");//結(jié)束標(biāo)簽
serializer.startTag(null,"number");
serializer.text(number);
serializer.endTag(null,"number");
serializer.startTag(null,"sex");
serializer.text(sex);
serializer.endTag(null,"sex");
serializer.endTag(null,"student");
serializer.endDocument();//寫結(jié)尾
os.close();
Toast.makeText(this,"保存數(shù)據(jù)成功", 0).show();
} catch (Exception e) {e.printStackTrace();
Toast.makeText(this,"保存數(shù)據(jù)失敗", 0).show();
}

XML的解析

1. DOM解析

是一種基于對(duì)象的API,它會(huì)將XML文件的所有內(nèi)容以文檔樹(shù)方式存放在內(nèi)存中,然后允許使用DOMAPI遍歷XML樹(shù)、檢索所需的數(shù)據(jù),這樣便能根據(jù)樹(shù)的結(jié)構(gòu)以節(jié)點(diǎn)形式來(lái)對(duì)文件進(jìn)行操作。由于DOM需要將整個(gè)XML文件以文檔樹(shù)的形式存放在內(nèi)存中,消耗內(nèi)存比較大,在Android下不介意使用該種方式進(jìn)行解析。

2. SAX解析

會(huì)逐行掃描XML文檔,當(dāng)遇到標(biāo)簽時(shí)觸發(fā)解析處理器,采用事件處理的方式解析XML。它在讀取文檔的同時(shí)即可對(duì)XML進(jìn)行處理,不必等到文檔加載結(jié)束,相對(duì)快捷,而且也不需要將整個(gè)文檔加載進(jìn)內(nèi)存,因此不存在占用內(nèi)存的問(wèn)題,可以解析超大XML。但是,SAX解析只能用來(lái)讀取XML的數(shù)據(jù),無(wú)法進(jìn)行增刪改。

3. PULL解析跟SAX解析類似,也是基于事件處理的方式。PULL解析器是一個(gè)開(kāi)源的Java項(xiàng)目,既可以用于Android應(yīng)用,也可以用與JavaEE程序。Android已經(jīng)集成了PULL解析器,因此,在android中最常用的解析方式就是PULL解析。

SAX和PULL解析對(duì)比:Pull 解析器的運(yùn)行方式與SAX

解析器相似,都屬于事件驅(qū)動(dòng)模式。它提供了類似的事件,如:開(kāi)始元素和結(jié)束元素事件,使用parser.next()可以進(jìn)入下一個(gè)元素并觸發(fā)相應(yīng)事件。事件將作為數(shù)值代碼被發(fā)送,因此可以使用一個(gè)switch

對(duì)感興趣的事件進(jìn)行處理。當(dāng)元素開(kāi)始解析時(shí),調(diào)用parser.nextText()方法可以獲取下一個(gè)Text

類型元素的值。

SAX 解析器的工作方式是自動(dòng)將事件推入事件處理器進(jìn)行處理,因此你不能控制事件的處理主動(dòng)結(jié)束;而Pull

解析器的工作方式為允許你的應(yīng)用程序代碼主動(dòng)從解析器中獲取事件,正因?yàn)槭侵鲃?dòng)獲取事件,因此可以在滿足了需要的條件后不再獲取事件,結(jié)束解析。

Android下使用PULL方式解析XML文件的代碼如下:

try {//學(xué)生信息的xml文件存在
//1.獲取到一個(gè)xml解析器
XmlPullParser parser = Xml.newPullParser();
//2.設(shè)置解析器的初始化參數(shù)
FileInputStream inputStream = new FileInputStream(file);parser.setInput(inputStream,
"utf-8");
//3.解析xml文件
int type = parser.getEventType();//得到第一個(gè)事件的類型.
System.out.println("type:"+type);
StringBuilder sb = new StringBuilder();//當(dāng)事件類型不是文檔的結(jié)尾則一直遍歷每一個(gè)節(jié)點(diǎn)
while(type!=XmlPullParser.END_DOCUMENT){if(type==XmlPullParser.START_TAG){
//開(kāi)始節(jié)點(diǎn)
//判斷節(jié)點(diǎn)的名稱
if("name".equals(parser.getName())){String nameStr = parser.nextText();
System.out.println("姓名:"+nameStr);
sb.append("姓名:"+nameStr+"\n");
}else if("number".equals(parser.getName())){String numberStr = parser.nextText();
System.out.println("學(xué)號(hào):"+numberStr);
sb.append("學(xué)號(hào):"+numberStr+"\n");
}else if("sex".equals(parser.getName())){String sexStr = parser.nextText();
System.out.println("性別:"+sexStr);
sb.append("性別:"+sexStr+"\n");
}
}
type = parser.next();//獲取下一個(gè)事件類型
System.out.println("type:"+type);
}
inputStream.close();//浪費(fèi)資源 造成內(nèi)存泄漏!
tv_result.setText(sb.toString());
} catch (Exception e) {e.printStackTrace();
Toast.makeText(this,"解析學(xué)生信息失敗", 0).show();
}

以上是“Xml格式數(shù)據(jù)如何生成和解析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁(yè)標(biāo)題:Xml格式數(shù)據(jù)如何生成和解析-創(chuàng)新互聯(lián)
新聞來(lái)源:http://chinadenli.net/article10/digcdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作網(wǎng)站策劃網(wǎng)頁(yè)設(shè)計(jì)公司App開(kāi)發(fā)服務(wù)器托管網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)