這篇文章主要為大家展示了“Xml格式數據如何生成和解析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Xml格式數據如何生成和解析”這篇文章吧。
1. Xml格式數據的生成和解析
使用xml 作為數據交互的載體是Android中非常重要的功能,比如天氣預報數據、短信備份數據、訊錄數據都可以以xml
的格式通過網絡傳輸。
XML的格式通過便簽的形式書寫和展示,一目了然,方便閱讀和識別,如下所示:
<xml 頭> <student> <name>張三</name> <number>110001</number> <sex>male</sex> </student>
XML的生成
如果用java代碼去實現這樣的一個字符串格式,可以使用到StringBuilder來進行組拼:StringBuilder sb = new StringBuilder();
//數據保存到文件 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
文件,但是無法對特殊字符進行處理,比如如果短信內容包含“</>”符號,那么xml
解析器就無法完成正確的解析。因此使用的前提是你確定數據內容沒有特殊字符。
而Android為我們提供了一個專門用于生成XML數據的API:XmlSerializer, 該api
內部已經實現了對特殊字符的處理,代碼如下:
try {// 采用Android的api面向對象的生成xml文件. // 1.得到xml文件的序列化器 XmlSerializer serializer = Xml.newSerializer(); // 2.指定序列化器的一些初始參數 File file = new File(getFilesDir(), name +".xml"); FileOutputStream os = new FileOutputStream(file);serializer.setOutput(os, "utf-8"); // 3.寫xml文件. serializer.startDocument("utf-8", true);//寫開頭serializer.startTag(null, "student");//開始標簽 serializer.startTag(null,"name"); serializer.text(name);//文本標簽 serializer.endTag(null,"name");//結束標簽 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();//寫結尾 os.close(); Toast.makeText(this,"保存數據成功", 0).show(); } catch (Exception e) {e.printStackTrace(); Toast.makeText(this,"保存數據失敗", 0).show(); }
XML的解析
1. DOM解析
是一種基于對象的API,它會將XML文件的所有內容以文檔樹方式存放在內存中,然后允許使用DOMAPI遍歷XML樹、檢索所需的數據,這樣便能根據樹的結構以節點形式來對文件進行操作。由于DOM需要將整個XML文件以文檔樹的形式存放在內存中,消耗內存比較大,在Android下不介意使用該種方式進行解析。
2. SAX解析
會逐行掃描XML文檔,當遇到標簽時觸發解析處理器,采用事件處理的方式解析XML。它在讀取文檔的同時即可對XML進行處理,不必等到文檔加載結束,相對快捷,而且也不需要將整個文檔加載進內存,因此不存在占用內存的問題,可以解析超大XML。但是,SAX解析只能用來讀取XML的數據,無法進行增刪改。
3. PULL解析跟SAX解析類似,也是基于事件處理的方式。PULL解析器是一個開源的Java項目,既可以用于Android應用,也可以用與JavaEE程序。Android已經集成了PULL解析器,因此,在android中最常用的解析方式就是PULL解析。
SAX和PULL解析對比:Pull 解析器的運行方式與SAX
解析器相似,都屬于事件驅動模式。它提供了類似的事件,如:開始元素和結束元素事件,使用parser.next()可以進入下一個元素并觸發相應事件。事件將作為數值代碼被發送,因此可以使用一個switch
對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法可以獲取下一個Text
類型元素的值。
SAX 解析器的工作方式是自動將事件推入事件處理器進行處理,因此你不能控制事件的處理主動結束;而Pull
解析器的工作方式為允許你的應用程序代碼主動從解析器中獲取事件,正因為是主動獲取事件,因此可以在滿足了需要的條件后不再獲取事件,結束解析。
Android下使用PULL方式解析XML文件的代碼如下:
try {//學生信息的xml文件存在 //1.獲取到一個xml解析器 XmlPullParser parser = Xml.newPullParser(); //2.設置解析器的初始化參數 FileInputStream inputStream = new FileInputStream(file);parser.setInput(inputStream, "utf-8"); //3.解析xml文件 int type = parser.getEventType();//得到第一個事件的類型. System.out.println("type:"+type); StringBuilder sb = new StringBuilder();//當事件類型不是文檔的結尾則一直遍歷每一個節點 while(type!=XmlPullParser.END_DOCUMENT){if(type==XmlPullParser.START_TAG){ //開始節點 //判斷節點的名稱 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("學號:"+numberStr); sb.append("學號:"+numberStr+"\n"); }else if("sex".equals(parser.getName())){String sexStr = parser.nextText(); System.out.println("性別:"+sexStr); sb.append("性別:"+sexStr+"\n"); } } type = parser.next();//獲取下一個事件類型 System.out.println("type:"+type); } inputStream.close();//浪費資源 造成內存泄漏! tv_result.setText(sb.toString()); } catch (Exception e) {e.printStackTrace(); Toast.makeText(this,"解析學生信息失敗", 0).show(); }
以上是“Xml格式數據如何生成和解析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!
網頁標題:Xml格式數據如何生成和解析-創新互聯
新聞來源:http://www.yijiale78.com/article10/digcdo.html
成都網站建設公司_創新互聯,為您提供網站制作、網站策劃、網頁設計公司、App開發、服務器托管、網站排名
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯