服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android实现向本地写入一个XML文件和解析XML文件

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

2022-11-30 15:11月月鸟要好好学习安卓 Android

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
     * 向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文件

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

二、解析本地XML文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
     * 读取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、根据标签的不同判断并保存信息。

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

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

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

1、获取数据流

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

2、解析xml文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/chenfengdejuanlian/article/details/47060413

延伸 · 阅读

精彩推荐