文档章节

Android应用开发--使用XmlPullParser解析XML文件

T
 TPrime_A
发布于 06/16 00:55
字数 440
阅读 7
收藏 0

使用Android SDK自带的XmlPullParser类可以很方便的解析XML文件

参考连接:https://developer.android.google.cn/reference/org/xmlpull/v1/XmlPullParser?hl=en

准备一个XML文件:

<?xml version="1.0" encoding="utf-8"?>
<Params name="demo">
    <Param name="com.sina.weibo"/>
</Params> 

新建一个HelloWorld程序,示例代码如下:

package com.tprime.demo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.Xml;
import android.view.View;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private String TAG = "TAG_XML_PULL_PARSER";
    private String configPath = "/sdcard/blacklist.xml";

    private List<String> filterList = new ArrayList<String>();
    private List<String> testNameList = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        testNameList.add("com.sina.weibo");
        testNameList.add("com.sina.weibo.MainActivity");
        testNameList.add("com.sina");
        testNameList.add("com");
        testNameList.add("");
        testNameList.add("/com.sina");
        testNameList.add("com.*sina");
        testNameList.add(null);
    }

    public void inFilterList(View v){
        StringBuffer sb = new StringBuffer();
        for(String name: testNameList) {
            sb.append(name + "\t");
            sb.append(filterList.contains(name));
            sb.append("\n");
        }
        Log.d(TAG, sb.toString());
    }

    public void parseConfigXml(View v) {
        Log.d(TAG, "parseConfigXml +++++++++++++++++++++++++++");

        FileReader fileReader = null;
        try {
            File file = new File(configPath);
            fileReader = new FileReader(file);

            // XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            // XmlPullParser xmlParser = factory.newPullParser();
            XmlPullParser xmlParser = Xml.newPullParser();
            xmlParser.setInput(fileReader);
            int eventType = xmlParser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                    case XmlPullParser.START_DOCUMENT:
                        break;
                    case XmlPullParser.START_TAG:
                        Log.d(TAG, "OUTER if Param: " + xmlParser.getAttributeValue(0));
                        if (xmlParser.getName().equals("Param")) {
                            Log.d(TAG, "INNER if Param: " + xmlParser.getAttributeValue(0));
                            if (xmlParser.getAttributeName(0).equals("name")) {
                                filterList.add(xmlParser.getAttributeValue(0));
                            }
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        break;
                    default:
                        break;
                }
                eventType = xmlParser.next();
            }
        } catch (XmlPullParserException e) {
            Log.e(TAG, "ERROR 01: " + e.getStackTrace().toString());
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            Log.e(TAG, "ERROR 02: " + e.getStackTrace().toString());
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fileReader != null){
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        Log.d(TAG, "parseConfigXml ---------------------------");
    }
}

对应的xml而已很简单,就两个按钮,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:text="开始解析"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="parseConfigXml"/>

    <Button
        android:text="是否在名单中"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="inFilterList"/>
</android.support.v7.widget.LinearLayoutCompat>

 

© 著作权归作者所有

上一篇: VIM使用总结
下一篇: VIM使用总结
T
粉丝 0
博文 2
码字总数 2336
作品 0
合肥
私信 提问
Android 使用LayoutInflater.Factory2创建布局

一,解析LayoutInflater运行原理 从创建一个LayoutInflater的方式我们可以知道,LayoutInflater是系统提供的单例对象 关于Inflate方法,主要分为2组,但前2组最终也是通过调用后2组中的某一个...

IamOkay
2015/04/24
0
0
PULL解析XML和SAX解析的区别

如果在一个XML文档中我们只需要前面一部分数据,但是使用SAX方式或DOM方式会对整个文档进行解析,尽管XML文档中后面的大部分数据我们其实都不需要解析,因此这样实际上就浪费了处理资源。使用...

TedYin
2013/11/12
0
0
Android开发进阶(五)--使用原始的XML文件

应用场景 在Android应用开发过程中,有时候我们自己有一些XML文件是我们自己手动创建的,而在项目开发过程中可能会用到,也就是说这用到了原始的XML资源文件。这个XML原始资源文件我们可以通...

程序袁_绪龙
2015/01/07
0
0
Android高手进阶教程(二十一)之---Android中创建与几种解析xml的方法!

大家好今天我今天给大家讲解一下android中xml的创建以及一些解析xml的常用方法。 首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullPa...

迷途d书童
2012/02/29
301
1
Android 中创建与解析XML的方法

大家好今天我今天给大家讲解一下android中xml的创建以及一些解析xml的常用方法。首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom, sax, XmlPullPa...

阿酷
2011/11/07
950
0

没有更多内容

加载失败,请刷新页面

加载更多

php 遇到 No input file specified的解决方法

(一)IIS Noinput file specified 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.ini 找到 ; cgi.force_redirect = 1 去掉前面分号,把后面的1...

chenhongjiang
今天
5
0
MySQL 基础

一、常用命令 在命令行中,配置好环境变量后,通过cmd可以直接进入mysql命令行模式,同时列举几种常用命令 # 进入mysql数据库,密码可以先不写,打完-p后再输入,防止被别人看到mysql -u账...

华山猛男
今天
6
0
简单的博客系统(四)Django请求HTML页面视图信息--基于函数的视图

1. 编写用于查询数据的功能函数 应用目录 下的 views.py 文件通常用于保存响应各种请求的函数或类 from django.shortcuts import renderfrom .models import BlogArticles# Create your ...

ZeroBit
今天
5
0
用脚本将本地照片库批量导入到Day One中

因为目前iCloud 空间已经不足,其中95%都是照片,之前入手了DayOne,且空间没有限制,订阅费一年也不少,再加上DayOne作为一款日记App 也比较有名,功能方面最大的就是地理视图与照片视图,尤...

在山的那边
昨天
21
0
jupyter部署安装

python373 -m ipykernel install --name python373 ipython kernelspec list sc create myjupyterservice binpath="D:\apply\Python373\Scripts\jupyter-notebook --config=V:/my_work/jupyt......

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部