热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android实现向本地写入一个XML文件和解析XML文件

这篇文章主要介绍了Android实现向本地写入一个XML文件和解析XML文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在网络存储过程中有很多时候会遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比较多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡写入一个XML文件,然后再使用pull解析的方法对文件进行解析。

一、向SD卡中写入一个XML文件:

/**
	 * 向SD卡写入一个XML文件
	 * 
	 * @param v
	 */
	public void savexml(View v) {
 
		try {
			File file = new File(Environment.getExternalStorageDirectory(),
					"persons.xml");
			FileOutputStream fos = new FileOutputStream(file);
			// 获得一个序列化工具
			XmlSerializer serializer = Xml.newSerializer();
			serializer.setOutput(fos, "utf-8");
			// 设置文件头
			serializer.startDocument("utf-8", true);
			serializer.startTag(null, "persons");
			for (int i = 0; i <10; i++) {
				serializer.startTag(null, "person");
				serializer.attribute(null, "id", String.valueOf(i));
				// 写姓名
				serializer.startTag(null, "name");
				serializer.text("张三" + i);
				serializer.endTag(null, "name");
				// 写性别
				serializer.startTag(null, "gender");
				serializer.text("男" + i);
				serializer.endTag(null, "gender");
				// 写年龄
				serializer.startTag(null, "age");
				serializer.text("1" + i);
				serializer.endTag(null, "age");
 
				serializer.endTag(null, "person");
			}
			serializer.endTag(null, "persons");
			serializer.endDocument();
			fos.close();
			Toast.makeText(MainActivity.this, "写入成功", 0).show();
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(MainActivity.this, "写入失败", 0).show();
		}
 
	}

1、设置XML文件保存的地址,2、获得一个序列化工具,3、写XML文件的头,4、循环写入信息。

最后得到的XML文件

二、解析本地XML文件

/**
	 * 读取SD卡中的XML文件,使用pull解析
	 * 
	 * @param v
	 */
	public void readxml(View v) {
 
		try {
			File path = new File(Environment.getExternalStorageDirectory(),
					"persons.xml");
			FileInputStream fis = new FileInputStream(path);
 
			// 获得pull解析器对象
			XmlPullParser parser = Xml.newPullParser();
			// 指定解析的文件和编码格式
			parser.setInput(fis, "utf-8");
 
			int eventType = parser.getEventType(); // 获得事件类型
 
			String id = null;
			String name = null;
			String gender = null;
			String age = null;
			while (eventType != XmlPullParser.END_DOCUMENT) {
				String tagName = parser.getName(); // 获得当前节点的名称
 
				switch (eventType) {
				case XmlPullParser.START_TAG: // 当前等于开始节点 
					if ("persons".equals(tagName)) { // 
					} else if ("person".equals(tagName)) { // 
						id = parser.getAttributeValue(null, "id");
					} else if ("name".equals(tagName)) { // 
						name = parser.nextText();
					}else if ("gender".equals(tagName)) { // 
						gender = parser.nextText();
					} else if ("age".equals(tagName)) { // 
						age = parser.nextText();
					}
					break;
				case XmlPullParser.END_TAG: // 
					if ("person".equals(tagName)) {
						Log.i(TAG, "id---" + id);
						Log.i(TAG, "name---" + name);
						Log.i(TAG, "gender---" + gender);
						Log.i(TAG, "age---" + age);
					}
					break;
				default:
					break;
				}
				eventType = parser.next(); // 获得下一个事件类型
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			
		}

1、获取要解析XML文件的地址,2、获得pull解析工具,3、根据标签的不同判断并保存信息。

在解析过程中遇到一个问题,就是在解析完了之后,调用fis.close()函数时,会报bad file number的错误,检查了很久才发现是这句话的问题。

补充知识:Android 读取raw下的xml配置文件

1、获取数据流

// 读取配置文件
InputStream in = context.getResources().openRawResource(R.raw.cfg);

2、解析xml文件

public class XmlParser{
  public T xmlParser(InputStream xml) throws Exception {
    XmlPullParser pullParse = Xml.newPullParser();
    pullParse.setInput(xml, "UTF-8");
    int event = pullParse.getEventType();
    while (event != XmlPullParser.END_DOCUMENT) {
      switch (event) {

        case XmlPullParser.START_DOCUMENT:
          //文件开头
          break;

        case XmlPullParser.START_TAG:
          //标签开始标志
          //pullParse.getName() 获取标签名
          //pullParse.getAttributeValue(0)获取标签的参数
          //pullParse.nextText() 获取标签内的值

          break;

        case XmlPullParser.END_TAG:
          //标签结束标志
          break;
      }
      event = pullParse.next();//进行下一个标签的解析

    }
    return T;
  }
}

以上这篇Android实现向本地写入一个XML文件和解析XML文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 使用Echarts for Weixin 小程序实现中国地图及区域点击事件
    本文介绍了如何使用Echarts for Weixin在微信小程序中构建中国地图,并实现区域点击事件。包括效果展示、条件准备和逻辑实现的具体步骤。 ... [详细]
  • 本文探讨了如何在游戏启动画面中移除广告,特别是在游戏数据加载期间(大约5-6秒)广告会短暂显示的问题。通过调整XML布局和代码逻辑,可以实现广告的延迟加载或完全移除。 ... [详细]
  • spring(22)JdbcTemplate
    2019独角兽企业重金招聘Python工程师标准###1.导入jar包,必须jar包:c3p0、mysql-connector、beans、con ... [详细]
  • 题目描述:计算从起点到终点的最小能量消耗。如果下一个单元格的风向与当前单元格相同,则消耗为0,否则为1。共有8个可能的方向。 ... [详细]
  • 树莓派4B:安装基础操作系统指南
    本文将详细介绍如何为树莓派4B安装基础操作系统,包括所需材料、镜像下载、镜像烧录以及更换国内源等步骤。 ... [详细]
  • 本文介绍了GitHub上的一些Python开源项目,特别是IM(即时通讯)技术的应用。通过Sealtalk项目,探讨了如何利用开源SDK提升开发效率。 ... [详细]
  • 腾讯云移动推送TPNS(Tencent Push Notification Service)为APP开发者和运营人员提供了一站式、高效、稳定的推送解决方案,帮助提升用户活跃度和运营效率。 ... [详细]
  • 各位读者,大家好!在上一期中,我们讨论了如何在Android中创建程序启动界面。本期我们将重点介绍ImageView的常用属性,特别是src属性。让我们一起深入了解Android吧! ... [详细]
  • AngularJS 控制器详解
    本文通过一个示例详细介绍了 AngularJS 控制器的使用方法,并探讨了控制器之间数据共享的问题。 ... [详细]
  • android开发分享荐                                                         Android思维导图布局:效果展示及使用方法
    思维导图布局的前身是树形布局,对树形布局基本使用还不太了解的朋友可以先看看我写的树形布局系列教程,了解了树形布局的使用方法后再来阅读本文章。先睹为快来看看效果吧,横向效果如下:纵向 ... [详细]
  • 前言:由于Android系统本身决定了其自身的单线程模型结构。在日常的开发过程中,我们又不能把所有的工作都交给主线程去处理(会造成UI卡顿现象)。因此,适当的创建子线程去处理一些耗 ... [详细]
  • Java中的引用类型详解
    本文详细介绍了Java中的引用类型,包括强引用、软引用、弱引用和虚引用的特点和应用场景。 ... [详细]
  • 本文详细介绍了 Android WebView 中 setInitialScale 方法的使用及其重要性。通过设置不同的缩放比例,可以确保网页在不同分辨率的设备上显示最佳效果。 ... [详细]
  • 本文详细介绍了如何在Android应用中实现重复报警功能。示例代码可在以下路径找到:https://developer.android.com/samples/RepeatingAlarm/index.html。首先,我们将从Manifest文件开始分析。 ... [详细]
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
author-avatar
岁月完好
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有