博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
andoird --- XmlPullParser 的使用
阅读量:2264 次
发布时间:2019-05-09

本文共 8718 字,大约阅读时间需要 29 分钟。

有个升级项目需要使用到xml文件,由于XmlPullParser最简单所以选择它也完全满足当前的需求应用。

下面就简要的说明一下具体的用法。
1、基本原理:
常用的有:
XmlPullParser.END_DOCUMENT
XmlPullParser.START_DOCUMENT
XmlPullParser.START_TAG
XmlPullParser.END_TAG
XmlPullParser.TEXT 
分别代表着XML文档的结束,开始,标签的开始,标签的结束,内容 
按照以上的格式依次进行解析即可。
2、介绍了三种不同的xml格式及解析方法
新建一个新的activiy文件,其实就是程序启动发源地而已。

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());    }   }
为了便于xml解析内容的存取,新建了一个Person.java类,内容如下:
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;	}};
为方便其它程序简洁使用xml的读取及解析,封装了一个xmlReader.java类,内容如下:
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();	}};
需要读取的xml资源文件放在 res\xm;\person.xml,其具体内容如下:
tom
25
engineer
kite
21
tester
rose
28
manager
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内容解析:
/* 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
相应的打印内容:
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、直接从内存中读取
/* 直接使用内存测试 */	private void xml_memory_test(){		String xml_test = "
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()); } 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 ; }
输出内容:
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格式用法
/* 另类xml文件写法 */	private void xml_misc_test(){		String xml_test = "
"; 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 ; }
输出内容:
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

转载地址:http://nrdcb.baihongyu.com/

你可能感兴趣的文章
NGUI:浅谈NGUI中UISprite和UITexture
查看>>
删除Xcode中多余的证书provisioning profile
查看>>
Unity3D游戏中Android和iOS本地推送通知
查看>>
Unity3D如何接入第三方的SDK - Android篇
查看>>
Unity3D:unity与Android相互传递消息 & unity与ios相互传递消息
查看>>
unity3D:Unity中的优化技术
查看>>
使用fastlane实现iOS持续集成
查看>>
Unity3D研究院之IOS全自动编辑framework、plist、oc代码
查看>>
使用python对cocos2dx的手游图片资源进行加密
查看>>
iOS开发证书知识点总结
查看>>
iOS非常全的三方库、插件、大牛博客
查看>>
cocos2d-x加载图片显示不清晰
查看>>
cocos2d-x中CCTableView的使用
查看>>
cocos2d-x中中文显示问题解决方法一
查看>>
cocos2d-x中中文显示问题解决方法二
查看>>
cocos2d-x2.0后增加的新功能,slider的使用
查看>>
cocos2d-x中按钮点击后切换图片功能
查看>>
cocos2d-x中带光标的输入框(CCTextFieldTTF)(这个不完善,后期再继续研究)
查看>>
cocos2d-x-2.0 ListView使用
查看>>
cocos2d-x开发学习资源汇总(网站)持续更新中...
查看>>