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

 更新时间:2020年03月23日 09:53:58   作者:月月鸟要好好学习安卓  
这篇文章主要介绍了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: // 当前等于开始节点 <person>
					if ("persons".equals(tagName)) { // <persons>
					} else if ("person".equals(tagName)) { // <person id="1">
						id = parser.getAttributeValue(null, "id");
					} else if ("name".equals(tagName)) { // <name>
						name = parser.nextText();
					}else if ("gender".equals(tagName)) { // <age>
						gender = parser.nextText();
					} else if ("age".equals(tagName)) { // <age>
						age = parser.nextText();
					}
					break;
				case XmlPullParser.END_TAG: // </persons>
					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<T>{
  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文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Android GridView不改变背景色实现网格线效果

    Android GridView不改变背景色实现网格线效果

    这篇文章主要介绍了Android GridView不改变背景色实现网格线效果,需要的朋友可以参考下
    2016-03-03
  • 深入Android Handler,MessageQueue与Looper关系

    深入Android Handler,MessageQueue与Looper关系

    这篇文章主要介绍了深入Android Handler,MessageQueue与Looper关系,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 解决Android7.0更新后无法安装的问题

    解决Android7.0更新后无法安装的问题

    项目中发现在自动更新功能的时候,下载好了apk的文件后在android7.0系统中不能自动跳到安装界面,后来搜索了一番解决了问题,但感觉没有描述清楚,所以补充一下。
    2017-12-12
  • android scrollview顶部渐渐消失实现实例详解

    android scrollview顶部渐渐消失实现实例详解

    这篇文章主要为大家介绍了android scrollview顶部渐渐消失实现实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Android ListView列表实现倒计时

    Android ListView列表实现倒计时

    这篇文章主要为大家详细介绍了Android ListView列表实现倒计时,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Android Studio 3.6 layout文件text模式切换问题

    Android Studio 3.6 layout文件text模式切换问题

    这篇文章主要介绍了Android Studio 3.6 layout文件text模式切换问,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • 详解如何在Flutter中获取设备标识符

    详解如何在Flutter中获取设备标识符

    这篇文章主要为大家介绍了几种通过Flutter读取设备信息的方法,文中的示例代码讲解详细,感兴趣的小伙伴快跟随小编一起学习一下
    2022-04-04
  • Activity实例详解之启动activity并返回结果

    Activity实例详解之启动activity并返回结果

    这篇文章主要介绍了Activity实例详解之启动activity并返回结果 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Android 操作系统获取Root权限 原理详细解析

    Android 操作系统获取Root权限 原理详细解析

    许多机友新购来的Android机器没有破解过Root权限,无法使用一些需要高权限的软件,以及进行一些高权限的操作,其实破解手机Root权限是比较简单及安全的,破解Root权限的原理就是在手机的/system/bin/或/system/xbin/目录下放置一个可执行文件“su”
    2013-10-10
  • Kotlin的Collection与Sequence操作异同点详解

    Kotlin的Collection与Sequence操作异同点详解

    这篇文章主要介绍了Kotlin的Collection与Sequence操作异同点详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论