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(); }
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格式資料的產生和解析的程式碼詳情的詳細內容。更多資訊請關注PHP中文網其他相關文章!