真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Xml格式數(shù)據(jù)如何生成和解析

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

為華亭等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及華亭網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、華亭網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

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ū)寫(xiě)和展示,一目了然,方便閱讀和識(shí)別,如下所示:



張三
110001
male

XML的生成

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

//數(shù)據(jù)保存到文件
sb.append("");
sb.append("");
sb.append("");
sb.append(name);
sb.append("");
sb.append("");
sb.append(number);
sb.append("");
sb.append("");
sb.append(sex);
sb.append("");
sb.append("");

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

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

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

而Android為我們提供了一個(gè)專門(mén)用于生成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.寫(xiě)xml文件.
serializer.startDocument("utf-8",
true);//寫(xiě)開(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();//寫(xiě)結(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解析類(lèi)似,也是基于事件處理的方式。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)模式。它提供了類(lèi)似的事件,如:開(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

類(lèi)型元素的值。

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è)事件的類(lèi)型.
System.out.println("type:"+type);
StringBuilder sb = new StringBuilder();//當(dāng)事件類(lèi)型不是文檔的結(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è)事件類(lèi)型
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è)資訊頻道!


文章標(biāo)題:Xml格式數(shù)據(jù)如何生成和解析
網(wǎng)站地址:http://weahome.cn/article/pphgpi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部