andoird --- XmlPullParser 的使用
来源:互联网 发布:nature数据库 东南大学 编辑:程序博客网 时间:2024/04/28 23:13
http://blog.csdn.net/andyhuabing/article/details/8036340
有个升级项目需要使用到xml文件,由于XmlPullParser最简单所以选择它也完全满足当前的需求应用。
下面就简要的说明一下具体的用法。
1、基本原理:
常用的有:
XmlPullParser.END_DOCUMENT
XmlPullParser.START_DOCUMENT
XmlPullParser.START_TAG
XmlPullParser.END_TAG
XmlPullParser.TEXT
分别代表着XML文档的结束,开始,标签的开始,标签的结束,内容
按照以上的格式依次进行解析即可。
2、介绍了三种不同的xml格式及解析方法
新建一个新的activiy文件,其实就是程序启动发源地而已。
- <span style="font-size:18px;">public class MainActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- xmltest xl = new xmltest();
- xl.test(getResources());
- }
- }</span>
为了便于xml解析内容的存取,新建了一个Person.java类,内容如下:
- <span style="font-size:18px;">package com.test.xmlactivity;
- class Person{
- private int id = -1;
- private int age = 0;
- private String name = null;
- private String title = null;
- public Person(){
- //TODO
- }
- public Person(int _id,int _age,String _name,String _title){
- this.id = _id ;
- this.age = _id;
- this.name = _name;
- this.title = _title;
- }
- public void setID(int id){
- this.id = id;
- }
- public int getID(){
- return this.id;
- }
- public void setAge(int age){
- this.age = age;
- }
- public int getAge(){
- return this.age;
- }
- public void setName(String name){
- this.name = name;
- }
- public String getName(){
- return this.name;
- }
- public void setTitle(String title){
- this.title = title;
- }
- public String getTitle(){
- return this.title;
- }
- };</span>
为方便其它程序简洁使用xml的读取及解析,封装了一个xmlReader.java类,内容如下:
- <span style="font-size:18px;">package com.test.xmlactivity;
- import java.io.IOException;
- import java.io.StringReader;
- import org.xmlpull.v1.XmlPullParser;
- import org.xmlpull.v1.XmlPullParserException;
- import org.xmlpull.v1.XmlPullParserFactory;
- import android.util.Log;
- class XmlReader{
- private final static String TAG = "XmlReader";
- private XmlPullParser xmlparser = null;
- public static final String charset = "utf-8";
- public XmlReader(){
- try {
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
- factory.setNamespaceAware(true);
- xmlparser = factory.newPullParser();
- } catch (Exception e) {
- e.printStackTrace();
- Log.e(TAG,"create xml reader failed");
- }
- }
- public void setXML(String xml) throws IOException{
- try {
- xmlparser.setInput(new StringReader(xml));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public int getNextEvent() throws IOException {
- try {
- return xmlparser.next();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return -1;
- }
- public String getNextText() throws IOException{
- try {
- return xmlparser.nextText();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- public int getEventType() throws IOException {
- try {
- return xmlparser.getEventType();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return -1;
- }
- public String getName() {
- return xmlparser.getName();
- }
- public String getText() {
- return xmlparser.getText();
- }
- public int attributeCount() {
- return xmlparser.getAttributeCount();
- }
- public String getAttributeName(int i) {
- return xmlparser.getAttributeName(i);
- }
- public String getAttributeValue(String name) {
- String v = xmlparser.getAttributeValue(null, name);
- return v;
- }
- public int getDepth() {
- return xmlparser.getDepth();
- }
- };
- </span>
需要读取的xml资源文件放在 res\xm;\person.xml,其具体内容如下:
- <span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
- <White-collars>
- <employee id="1">
- <name>tom</name>
- <age>25</age>
- <title>engineer</title>
- </employee>
- <employee id="2">
- <name>kite</name>
- <age>21</age>
- <title>tester</title>
- </employee>
- <employee id="3">
- <name>rose</name>
- <age>28</age>
- <title>manager</title>
- </employee>
- </White-collars>
- </span>
a、从资源文件中读取
需要使用系统资源,必须有Context对象,而Activity可以持有,所以需要在测试前将其资源句柄传入
xl.test(getResources());
而在具体的类中记录下来即可使用
private XmlReader XR = null;
private ArrayList<Person> mperlist = new ArrayList<Person>();
private Resources mRes = null;
public void test(Resources _res){
this.mRes = _res;
xml_test_main();
}
下面说明一下具体的xml内容解析:
- <span style="font-size:18px;"> /* 1、使用文件测试 */
- private void xml_file_test(){
- int eventType = -1;
- Person ps = null;
- XmlResourceParser xrp = mRes.getXml(R.xml.personal);
- try {
- eventType = xrp.getEventType();
- while (eventType != XmlPullParser.END_DOCUMENT) {
- switch (eventType) {
- case XmlPullParser.START_DOCUMENT:
- break;
- case XmlPullParser.END_DOCUMENT:
- break;
- case XmlPullParser.START_TAG: {
- String tagName = xrp.getName();
- if (tagName != null && tagName.equals("employee")) {
- ps = new Person();
- int id = Integer.parseInt(xrp.getAttributeValue(null, "id"));
- ps.setID(id);
- }
- if (tagName != null && tagName.equals("name")) {
- String name;
- try {
- name = xrp.nextText();;
- ps.setName(name);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (tagName != null && tagName.equals("title")) {
- String title;
- try {
- title = xrp.nextText();
- ps.setTitle(title);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (tagName != null && tagName.equals("age")) {
- String age;
- try {
- age = xrp.nextText();
- ps.setAge(Integer.parseInt(age));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- break;
- case XmlPullParser.END_TAG: {
- if (xrp.getName().equals("employee")) {
- mperlist.add(ps);
- }
- }
- break;
- case XmlPullParser.TEXT:
- break;
- default:
- break;
- }
- eventType = xrp.next();
- }
- } catch (Exception e) {
- // TODO: handle exception
- }
- for(int i=0;i<mperlist.size();i++){
- Log.i(TAG,"person info ====");
- Log.i(TAG,"ID = " + mperlist.get(i).getID());
- Log.i(TAG,"name = "+ mperlist.get(i).getName());
- Log.i(TAG,"age = " + mperlist.get(i).getAge());
- Log.i(TAG,"title = " + mperlist.get(i).getTitle());
- }
- }</span>
相应的打印内容:
10-02 10:47:50.725: I/xmltest(12364): person info ====
10-02 10:47:51.094: I/xmltest(12364): ID = 1
10-02 10:47:51.382: I/xmltest(12364): name = tom
10-02 10:47:51.647: I/xmltest(12364): age = 25
10-02 10:47:51.986: I/xmltest(12364): title = engineer
10-02 10:48:03.057: I/xmltest(12364): person info ====
10-02 10:48:03.057: I/xmltest(12364): ID = 2
10-02 10:48:03.057: I/xmltest(12364): name = kite
10-02 10:48:03.057: I/xmltest(12364): age = 21
10-02 10:48:03.057: I/xmltest(12364): title = tester
10-02 10:48:05.038: I/xmltest(12364): person info ====
10-02 10:48:05.038: I/xmltest(12364): ID = 3
10-02 10:48:05.038: I/xmltest(12364): name = rose
10-02 10:48:05.038: I/xmltest(12364): age = 28
10-02 10:48:05.038: I/xmltest(12364): title = manager
b、直接从内存中读取
- <span style="font-size:18px;"> /* 直接使用内存测试 */
- private void xml_memory_test(){
- String xml_test = "<foo>Hello World!</foo>";
- try {
- XR.setXML(xml_test);
- int eventType = XR.getEventType();
- Log.i(TAG,"eventType: " + eventType);
- while (eventType != XmlPullParser.END_DOCUMENT) {
- if (eventType == XmlPullParser.START_DOCUMENT) {
- Log.i(TAG,"Start document");
- } else if (eventType == XmlPullParser.START_TAG) {
- Log.i(TAG,"Start tag " + XR.getName());
- } else if (eventType == XmlPullParser.END_TAG) {
- Log.i(TAG,"End tag " + XR.getName());
- } else if (eventType == XmlPullParser.TEXT) {
- Log.i(TAG,"Text " + XR.getText());
- }
- eventType = XR.getNextEvent();
- Log.i(TAG,"eventType: " + eventType);
- }
- Log.i(TAG,"End document");
- } catch (Exception e) {
- e.printStackTrace();
- }
- return ;
- }</span>
输出内容:
10-02 10:48:07.975: I/xmltest(12364): eventType: 0
10-02 10:48:07.975: I/xmltest(12364): Start document
10-02 10:48:07.983: I/xmltest(12364): eventType: 2
10-02 10:48:07.983: I/xmltest(12364): Start tag foo
10-02 10:48:07.991: I/xmltest(12364): eventType: 4
10-02 10:48:07.999: I/xmltest(12364): Text Hello World!
10-02 10:48:07.999: I/xmltest(12364): eventType: 3
10-02 10:48:07.999: I/xmltest(12364): End tag foo
10-02 10:48:08.006: I/xmltest(12364): eventType: 1
10-02 10:48:08.006: I/xmltest(12364): End document
c、另外的xml格式用法
- <span style="font-size:18px;"> /* 另类xml文件写法 */
- private void xml_misc_test(){
- String xml_test = "<foo hi=\"Hello World!\"/>";
- try {
- XR.setXML(xml_test);
- int eventType = XR.getEventType();
- Log.i(TAG,"eventType: " + eventType);
- while (eventType != XmlPullParser.END_DOCUMENT) {
- if (eventType == XmlPullParser.START_DOCUMENT) {
- Log.i(TAG,"Start document");
- } else if (eventType == XmlPullParser.START_TAG) {
- Log.i(TAG,"Start tag " + XR.getName());
- String name = XR.getAttributeName(0);
- String value = XR.getAttributeValue(name);
- Log.i(TAG,"name:" + name + " value:" + value);
- } else if (eventType == XmlPullParser.END_TAG) {
- Log.i(TAG,"End tag " + XR.getName());
- } else if (eventType == XmlPullParser.TEXT) {
- Log.i(TAG,"Text " + XR.getText());
- }
- eventType = XR.getNextEvent();
- Log.i(TAG,"eventType: " + eventType);
- }
- Log.i(TAG,"End document");
- } catch (Exception e) {
- e.printStackTrace();
- }
- return ;
- }</span>
输出内容:
10-02 10:48:08.014: I/xmltest(12364): eventType: 0
10-02 10:48:08.014: I/xmltest(12364): Start document
10-02 10:48:08.014: I/xmltest(12364): eventType: 2
10-02 10:48:08.014: I/xmltest(12364): Start tag foo
10-02 10:48:08.014: I/xmltest(12364): name:hi value:Hello World!
10-02 10:48:08.014: I/xmltest(12364): eventType: 3
10-02 10:48:08.014: I/xmltest(12364): End tag foo
10-02 10:48:08.014: I/xmltest(12364): eventType: 1
10-02 10:48:08.014: I/xmltest(12364): End document
0 0
- andoird --- XmlPullParser 的使用
- andoird --- XmlPullParser 的使用
- andoird Xml解析XmlPullParser 的使用
- XmlPullParser的简单使用
- XmlPullParser的使用
- 注意XmlPullParser.nextText()的使用
- 使用XmlPullParser
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- xml解析(一) XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析XmlPullParser的使用
- C++ 中的赋值运算符重载和复制构造函数
- ECMS(帝国CMS)下创建表单实现客户端用户信息的录入
- HDU 1075 What Are You Talking About
- 全栈JavaScript之路(十八)HTML5 自定义数据属性
- 这世界为什么有这么一个妖孽
- andoird --- XmlPullParser 的使用
- Delphi的结构体用法2
- python 多线程与线程池
- OSX下MySQL学习基础环境搭建
- 这世界为什么有这么一个妖孽
- timeb 的使用
- 杭电题目分类
- 数据库选择
- ubuntu下kermit的安装和配置