最近学习Android时,需要用到解析XML文件里的数据,可以用XmlResourceParser来解析xml文件,正好将此记录下来。


XmlResourceParser里常用的字段和方法

首先先给出源码里面一些比较基础的,常用的方法和字段。

常用的字段

int START_DOCUMENT = 0;
int END_DOCUMENT = 1;
int START_TAG = 2;
int END_TAG = 3;
int TEXT = 4;

getEventType()

/**
* Returns the type of the current event (START_TAG, END_TAG, TEXT, etc.)
* 大意就是返回当前的事件类型(返回的字段都是xml文件中某些特定位置,比如标签开始标志,标签结束标志,文档结束标志等)
*
*/ int getEventType();

getName()

/**
* For START_TAG or END_TAG events, the (local) name of the current
* element is returned when namespaces are enabled. When namespace
* processing is disabled, the raw name is returned.
* 大意就是对于 START_TAG,END_TAG,这两种事件,有无使用命名空间情况下返回的标签名。至于命名空间的详情,可以去参考xml的具体介绍(囧:我也不懂)
*
*/
String getName();

getText()

/**
* Returns the text content of the current event as String.
* 返回text内容
*
*/
String getText();

getAttributeName(int index)

 /**
* Returns the local name of the specified attribute
* if namespaces are enabled or just attribute name if namespaces are disabled.
* 大意就是返回指定位置的属性名,位置从0开始
*
* @param index zero-based index of attribute
* @return attribute name (null is never returned)
*/
String getAttributeName(int index);

getAttributeValue(int index)

/**
* Returns the given attributes value.
* 大意就是返回指定位置的属性值,位置从0开始
*
* @param index zero-based index of attribute
* @return value of attribute (null is never returned)
*/
String getAttributeValue(int index);

getAttributeValue(String namespace,String name)

/**
* Returns the attributes value identified by namespace URI and namespace localName.
* If namespaces are disabled namespace must be null.
* 大意就是返回指定的属性名对应的属性值,如果没有使用命名空间,则第一个参数传入null
*
* @param namespace Namespace of the attribute if namespaces are enabled otherwise must be null
* @param name If namespaces enabled local name of attribute otherwise just attribute name
* @return value of attribute or null if attribute with given name does not exist
*/
String getAttributeValue(String namespace,String name);

next()

/**
* Get next parsing event - element content will be coalesced and only one
* TEXT event must be returned for whole element content
* 大意就是获取下一个要解析的事件,通俗点说就是类似于将光标往下移
*/
int next()

对于一些基础的操作,上述提供的信息就够用了。至于每个字段,方法都是干嘛用的,其实也就是字面上的意思。下面先上一张图:

XmlResourceParser具体如何解析xml不清楚,但解析过程有点类似于sqlite cursor遍历。首先都是初始定位在文档开始处,通过调用 next() 来将光标往下移,通过 getEventType() 来获取当前光标停留在哪里,然后再通过对应的 get××××() 方法来获取我们想要的数据。

实例

首先在res/目录下建一个xml文件夹,然后新建一个xml文件命名为xml.xml:

<?xml version="1.0" encoding="utf-8"?>
<xml>
<Node att1="hello" att2="world"/>
HelloWorld!
</xml>

然后是java代码,布局文件就一个按钮控件:

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private Button btn1; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
logXmlData();
}
});
} public void logXmlData() {
XmlResourceParser xmlParser = getResources().getXml(R.xml.xml); try {
int event = xmlParser.getEventType(); //先获取当前解析器光标在哪
while (event != XmlPullParser.END_DOCUMENT){ //如果还没到文档的结束标志,那么就继续往下处理
switch (event){
case XmlPullParser.START_DOCUMENT:
Log.i(TAG,"xml解析开始");
break;
case XmlPullParser.START_TAG:
//一般都是获取标签的属性值,所以在这里数据你需要的数据
Log.d(TAG,"当前标签是:"+xmlParser.getName());
if (xmlParser.getName().equals("Node")){
//两种方法获取属性值
Log.d(TAG,"第一个属性:" + xmlParser.getAttributeName(0)
+ ": " + xmlParser.getAttributeValue(0));
Log.d(TAG,"第二个属性:" + xmlParser.getAttributeName(1)+": "
+ xmlParser.getAttributeValue(null,"att2"));
}
break;
case XmlPullParser.TEXT:
Log.d(TAG,"Text:" + xmlParser.getText());
break;
case XmlPullParser.END_TAG:
break;
default:
break;
}
event = xmlParser.next(); //将当前解析器光标往下一步移
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

打出的日志:




最近刚开通了公众号,想激励自己坚持写作下去,初期主要分享原创的Android或Android-Tv方面的小知识,感兴趣的可以点一波关注,谢谢支持~~

【Android学习笔记】XmlResourceParser解析xml文件的更多相关文章

  1. Android学习笔记(9):使用XML文件和Java代码控制UI界面

    Android推荐使用XML文件设置UI界面.然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller.是模型(model)-视图(view)-控制 ...

  2. Android学习笔记之AndroidManifest.xml文件解析(转)

    //自已备注: <?xml version="1.0" encoding="utf-8"?>//说明了版本号,字符集 <manifest xm ...

  3. Android学习笔记之AndroidManifest.xml文件解析

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

  4. Android学习笔记之AndroidManifest.xml文件解析(详解)

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

  5. 八、Android学习第七天——XML文件解析方法(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...

  6. Android开发学习---使用XmlPullParser解析xml文件

    Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将 ...

  7. android 生成、pull解析xml文件

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  8. Android(java)学习笔记185:xml文件生成

    1.xml文件: 用元素描述数据,跨平台. 2.利用传统的方式创建xml文件,下面是一个案例: 设计思路:建立一个学生管理系统,创建xml文件保存学生信息: (1)首先是布局文件activity_ma ...

  9. Android(java)学习笔记128:xml文件生成

    1.xml文件: 用元素描述数据,跨平台. 2.利用传统的方式创建xml文件,下面是一个案例: 设计思路:建立一个学生管理系统,创建xml文件保存学生信息: (1)首先是布局文件activity_ma ...

随机推荐

  1. [后端人员耍前端系列]Bootstrap篇:30分钟快速掌握Bootstrap

    一.引言 很久没有写过博客了,但是最近这段时间都没有闲着,接触了很多方面.比如一些前端框架和组件.还有移动开发React-Native.以及对.NET框架设计的一些重新认识.这些内容在接下来的时间都会 ...

  2. 一个空行引起的阿里云负载均衡上部署https证书的问题

    今天在阿里云上购买了WoSign的https证书,在证书签发后,在控制台下载证书文件,一共有2个文件,一个是.key文件(私钥文件),一个是.pem文件(证书文件). 然后在阿里云负载均衡“证书管理” ...

  3. 动态绑定HTML

    在Web前端开发中,我们经常会遇见需要动态的将一些来自后端或者是动态拼接的HTML字符串绑定到页面DOM显示,特别是在内容管理系统(CMS:是Content Management System的缩写) ...

  4. [译]最长回文子串(Longest Palindromic Substring) Part I

    [译]最长回文子串(Longest Palindromic Substring) Part I 英文原文链接在(http://leetcode.com/2011/11/longest-palindro ...

  5. 12小时包你学会基于ReactMix框架的ReactNativeApp开发(二)基于Css+HTML写第一个app页面

    上一篇文章,大家对于ReactMix(https://github.com/xueduany/react-mix)框架有了一个基本认识,知道我们是一个语法糖,帮助大家基于一套代码,所有平台都能跑.那么 ...

  6. 使用IPostBackEventHandler让JavaScript“调用”回传事件

    在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——实践篇(二)通过自己模拟HTML标签事件与服务器交互,讲了ASP.NET的服务器控件是怎么render成HTML后市怎么“调用”后台方法 ...

  7. redis系列-redis的连接

    Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品.它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list ...

  8. vi 卡住怎么办

    http://zhidao.baidu.com/question/93283359.html ---------- 我貌似好像按了ctrl+s... 用惯了windows人,会习惯性地按Ctrl+S来 ...

  9. 说说设计模式~建造者模式(Builder)

    返回目录 建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我 ...

  10. MySQL的Grant命令[转]

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...