使用pull解析xml文件
发布时间:2020-12-16 00:07:43 所属栏目:百科 来源:网络整理
导读:在上一篇博客中介绍了使用xml序列化器保存数据,并且使用xml保存了模拟的10条短信,这篇博客介绍使用pull解析以xml方式保存在本地的那10条短信 和上一篇博客一样首先制作一个下图所示的界面,单击按钮后可以解析xml文件 点击解析xml文件按钮后,会在控制台中
在上一篇博客中介绍了使用xml序列化器保存数据,并且使用xml保存了模拟的10条短信,这篇博客介绍使用pull解析以xml方式保存在本地的那10条短信 和上一篇博客一样首先制作一个下图所示的界面,单击按钮后可以解析xml文件
点击解析xml文件按钮后,会在控制台中看到解析后的数据
实现方式,首先使用Android Studio创建一个Android工程,并且创建一个Message类用于处理短信数据 Message类中的代码如下 package com.fyt.resolvexml; //创建一个Message类,用于处理短信数据 public class Message { //短信的内容 private String body; //短信的发送日期 private String date; //收信人的地址(收信人的手机号码) private String address; //短信的类型 //0表示短信是发出去的 //1表示短信是收到的 private String type; //无参构造方法 public Message() { } //构造方法 public Message(String body,String date,String address,String type) { this.body = body; this.date = date; this.address = address; this.type = type; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getType() { return type; } public void setType(String type) { this.type = type; } @Override public String toString() { return "Message{" + "body='" + body + ''' + ",date='" + date + ''' + ",address='" + address + ''' + ",type='" + type + ''' + '}'; } } 然后修改MainActivity.java中的代码
package com.fyt.resolvexml; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.util.Xml; import android.view.View; import org.xmlpull.v1.XmlPullParser; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { //用于创建储存短信的集合 private List<Message> messageList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //解析xml文件 public void resolveXml(View view) { //如果SD卡的状态为正常挂载状态 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //创建File对象 //参数为用户名和密码的储存路径 File file = new File("sdcard/sms.xml"); //如果SD卡中存在sms.xml文件 if (file.exists()) { //捕获文件操作中可能出现的异常 try { //获得SD卡下的sms.xml文件 FileInputStream fis = new FileInputStream(file); //获得pull解析器对象 XmlPullParser xp = Xml.newPullParser(); //将文件以gbk编码的方式输入到xml中 xp.setInput(fis,"utf-8"); //获取当前节点的事件类型,通过事件类型的判断,我们可以知道当前节点是什么节点,从而确定我们应该做什么操作 int type = xp.getEventType(); //创建信息对象(用于处理短信数据) Message message = null; while(type != XmlPullParser.END_DOCUMENT) { //根据节点的类型,要做不同的操作 switch (type) { case XmlPullParser.START_TAG: //获取当前节点的名字 if("message".equals(xp.getName())) { //创建一个用于保存短信的集合 messageList = new ArrayList<Message>(); } else if("sms".equals(xp.getName())) { //创建短信对象 message = new Message(); } else if("body".equals(xp.getName())) { //获取当前节点的下一个节点的文本 String body = xp.nextText(); message.setBody(body); } else if("date".equals(xp.getName())) { //获取当前节点的下一个节点的文本 String date = xp.nextText(); message.setDate(date); } else if("address".equals(xp.getName())) { //获取当前节点的下一个节点的文本 String address = xp.nextText(); message.setAddress(address); } else if("type".equals(xp.getName())) { String Type = xp.nextText(); message.setType(Type); } break; case XmlPullParser.END_TAG: if("sms".equals(xp.getName())) { //把city的javabean放入集合中 messageList.add(message); } break; } //把指针移动到下一个节点,并返回该节点的事件类型 type = xp.next(); } for (Message m : messageList) { System.out.println(m.toString()); } //处理文件操作中产生的异常 } catch (Exception e) { e.printStackTrace(); } } } } } 最后在配置文件中添加两条权限
<!--对SD卡的写权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!--对SD卡的读取权限--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |