首先,指定XML格式,我指定的XML格式如下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message> <sms> <body> 陈驰0 </body> <date> 1462162910995 </date> <address> 1380 </address> <type> 1 </type> </sms> <message>
一、用xml序列化器来生成xml文件
//使用xml序列化器生成xml文件 //1.拿到序列化器对象 XmlSerializer xs = Xml.newSerializer(); //2.初始化 File file = new File(Environment.getExternalStorageDirectory(), "sms2.xml"); try { FileOutputStream fos = new FileOutputStream(file); //encoding:指定用什么编码生成xml文件 xs.setOutput(fos, "utf-8"); //3.开始生成xml文件 //encoding:指定头节点中encoding属性的值 //standalone:该xml文件是否独立 xs.startDocument("utf-8", true); xs.startTag(null, "message");//开始节点 for (Message msg : list) { xs.startTag(null, "sms"); xs.startTag(null, "body"); xs.text(msg.getBody()); xs.endTag(null, "body"); xs.startTag(null, "date"); xs.text(msg.getDate()); xs.endTag(null, "date"); xs.startTag(null, "address"); xs.text(msg.getAddress()); xs.endTag(null, "address"); xs.startTag(null, "type"); xs.text(msg.getType()); xs.endTag(null, "type"); xs.endTag(null, "sms"); } xs.endTag(null, "message");//结束节点 //告诉序列化器,生成完毕 xs.endDocument(); } catch (Exception e) { e.printStackTrace(); }
二、利用pull解析xml文件
File file = new File(Environment.getExternalStorageDirectory(), "sms2.xml"); try { FileInputStream fis = new FileInputStream(file); //拿到pull解析器对象 XmlPullParser xp = Xml.newPullParser(); //初始化 xp.setInput(fis, "utf-8"); //获取当前节点的事件类型,通过事件类型的判断,我们可以知道当前节点是什么节点, //从而确定我们应该做什么操作 int type = xp.getEventType(); Message msg = null; while(type != XmlPullParser.END_DOCUMENT){ //根据节点的类型,进行不同的操作 switch (type) { case XmlPullParser.START_TAG: //获取当前结点的名字 if("message".equals(xp.getName())){ //创建Message集合对象 list = new ArrayList<Message>(); }else if ("sms".equals(xp.getName())) { //创建Message的javabean msg = new Message(); }else if ("body".equals(xp.getName())) { //获取当前节点下一个节点的文本(即陈驰0) msg.setBody(xp.nextText()); }else if ("date".equals(xp.getName())) { //获取当前节点下一个节点的文本(即陈驰0) msg.setDate(xp.nextText()); }else if ("address".equals(xp.getName())) { //获取当前节点下一个节点的文本(即陈驰0) msg.setAddress(xp.nextText()); }else if ("type".equals(xp.getName())) { //获取当前节点下一个节点的文本(即陈驰0) msg.setType(xp.nextText()); } break; case XmlPullParser.END_TAG: if("sms".equals(xp.getName())){ list.add(msg); } break; default: break; } //把指针移动到下一个节点,并返回该节点的事件类型 type = xp.next(); } for (Message message : list) { System.out.println(message); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }