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文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android编程创建与解析xml的常用方法详解

    本文实例讲述了Android编程创建与解析xml的常用方法.分享给大家供大家参考,具体如下: 今天我今天给大家讲解一下Android创建xml以及一些解析xml的常用方法. 首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullParser等方法,由于sax代码有点复杂,本节只讲解一下dom与XmlPullParser解析,sax我将会在下一节单独讲解,至于几种解析xml的优缺点我就不再讲述了. 为了方便理解,我做了一

  • Android 代码写控件代替XML简单实例

    Android 代码写控件代替XML简单实例 简单的一个Button控件的练习. 实现代码: Button btn = new Button(HandlerToActivity.this); LinearLayout.LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; param

  • 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.getExter

  • Java中使用DOM4J生成xml文件并解析xml文件的操作

    目录 一.前言 二.准备依赖 三.生成xml文件生成标准展示 四.解析xml文件 五.总结 一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理一下自己的理解,只适合刚刚学习的,一起理解!今天我们把解析xml文件和生成xml文件在一起来展示. 二.准备依赖 <dependency> <groupId>dom4j</groupId&

  • python中利用xml.dom模块解析xml的方法教程

    一.什么是xml?有何特征? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 例子:del.xml <?xml version="1.0" encoding="utf-8"?> <catalog> <maxid>4</maxid> <login username="pytest" passwd='123456'> <cap

  • java解析xml之sax解析xml示例分享

    复制代码 代码如下: package com.test; import java.io.File;import java.io.FileInputStream;import java.util.ArrayList;import java.util.List; import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes;import org.x

  • java解析xml之jdom解析xml示例分享

    复制代码 代码如下: package com.test; import java.io.File;import java.util.ArrayList;import java.util.List; import org.jdom.Document;import org.jdom.Element;import org.jdom.input.SAXBuilder; public class JdomXML { public static void main(String[] args) {     

  • java解析xml之dom4j解析xml示例分享

    复制代码 代码如下: package com.test; import java.io.File;import java.util.ArrayList;import java.util.Iterator;import java.util.List; import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader; public class Dom4jXML { public static void

  • php获取通过http协议post提交过来xml数据及解析xml

    php 如何获取请求的xml数据,对方通过http协议post提交过来xml数据,php如何获取到这些数据呢? 复制代码 代码如下: <?php $xml_data ='<AATAvailReq1>'. '<Agency>'. '<Iata>1234567890</Iata>'. '<Agent>lgsoftwares</Agent>'. '<Password>mypassword</Password>'

  • java解析xml之dom解析xml示例分享

    复制代码 代码如下: package com.test; import java.io.File;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import o

  • python解析xml文件方式(解析、更新、写入)

    Overview 这篇博客内容将包括对XML文件的解析.追加新元素后写入到XML,以及更新原XML文件中某结点的值.使用的是python的xml.dom.minidom包,详情可见其官方文档:xml.dom.minidom官方文档.全文都将围绕以下的customer.xml进行操作: <?xml version="1.0" encoding="utf-8" ?> <!-- This is list of customers --> <c

  • 详解Android之解析XML文件三种方式(DOM,PULL,SAX)

    1.xml文件代码 <?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core

随机推荐