android开发基础教程—三种方式实现xml文件解析

1.sax方式

复制代码 代码如下:

/**

* 使用sax解析

*/

public class SaxParse{

/**

* sax解析器

*/

private SAXParser parser;

public SaxParse(){

try {

SAXParserFactory f = SAXParserFactory.newInstance();

parser = f.newSAXParser();

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

public List<Person> doParse(InputStream is) {

try {

XmlHandler h = new XmlHandler();

parser.parse(is,h);

return h.getpersons();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

* 处理器

*/

class XmlHandler extends DefaultHandler{

List<Person> persons = null ;

Person person = null ;

//当前元素名称

private String currEleName;

/**

* 文本节点触发该方法

*/

public void characters(char[] ch, int start, int length)throws SAXException {

String str = new String(ch,start,length);

//name

if("name".equals(currEleName)){

person.name = str ;

}

else if("age".equals(currEleName)){

person.age = Integer.parseInt(str);

}

}

public void endDocument() throws SAXException {

}

/**

* 元素结束

*/

public void endElement(String uri, String localName, String qName)

throws SAXException {

if("person".equals(localName)){

persons.add(person);

}

//将当前元素置空

else if(("name".equals(currEleName)) || ("age".equals(currEleName))){

this.currEleName = "" ;

}

}

/**

* 文档开始事件

*/

public void startDocument() throws SAXException {

persons = new ArrayList<Person>();

}

/**

* 元素开始事件

* localName:本地名

* uri:名字空间

* qName:限定名,前缀 + 本地名

*/

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

//实例化person对象

if("person".equals(localName)){

person = new Person();

person.id = Integer.parseInt(attributes.getValue(0));

}

//name元素

else if("name".equals(localName)){

this.currEleName = "name" ;

}

//name元素

else if("age".equals(localName)){

this.currEleName = "age" ;

}

}

public List<Person> getpersons(){

return persons ;

}

}

}

2.dom方式

复制代码 代码如下:

/**

* DOM解析

*/

public class DomParse{

//

private DocumentBuilder builder;

public DomParse(){

try {

DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();

this.builder = f.newDocumentBuilder();

} catch (Exception e) {

e.printStackTrace();

}

}

public List<Person> doParse(InputStream is) {

List<Person> persons = new ArrayList<Person>();

Person person = null ;

try {

Document doc = builder.parse(is);

NodeList list = doc.getElementsByTagName("person");

Element ele = null ;

for(int i = 0 ; i < list.getLength() ; i ++){

ele = (Element) list.item(i);

person = new Person();

person.id = Integer.parseInt(ele.getAttribute("id"));

person.name = getSubElementTextContent(ele,"name");

person.age = Integer.parseInt(getSubElementTextContent(ele,"age"));

persons.add(person);

}

} catch (Exception e) {

e.printStackTrace();

}

return persons;

}

/**

* 得到指定的资源中中间的文本内容

*/

private String getSubElementTextContent(Element ele, String tagName) {

NodeList list = ele.getElementsByTagName(tagName);

Element e = (Element) list.item(0);

//得到中间的文本节点

return e.getTextContent();

}

}

3.pull方式

复制代码 代码如下:

/**

* pull解析,拉模式,可以手动控制下一个事件是否触发.

*/

public class PullParse{

public List<Person> doParse(InputStream is) {

List<Person> persons = null ;

Person person = null ;

try {

XmlPullParser parser = Xml.newPullParser();

//设置解析数据源

parser.setInput(is, "utf-8");

//取得事件的类型

int eventType = parser.getEventType();

String eleName = null ;

while(eventType != XmlPullParser.END_DOCUMENT){

switch(eventType){

//文档开始

case XmlPullParser.START_DOCUMENT:

persons = new ArrayList<Person>();

break ;

//元素开始

case XmlPullParser.START_TAG:

eleName = parser.getName();

if("person".equals(eleName)){

person = new Person();

person.id = Integer.parseInt(parser.getAttributeValue(0));

}

else if("name".equals(eleName)){

person.name = parser.nextText();

}

else if("age".equals(eleName)){

person.age = Integer.parseInt(parser.nextText());

}

break ;

//标记结束

case XmlPullParser.END_TAG:

eleName = parser.getName();

if("person".equals(eleName)){

persons.add(person);

}

break ;

}

//手动激活下个事件的触发

eventType = parser.next();

}

} catch (Exception e) {

e.printStackTrace();

}

return persons;

}

}

时间: 2024-09-13 01:48:36

android开发基础教程—三种方式实现xml文件解析的相关文章

android开发基础教程—三种方式实现xml文件解析_Android

1.sax方式 复制代码 代码如下: /** * 使用sax解析 */ public class SaxParse{ /** * sax解析器 */ private SAXParser parser; public SaxParse(){ try { SAXParserFactory f = SAXParserFactory.newInstance(); parser = f.newSAXParser(); } catch (ParserConfigurationException e) { e

《Android开发基础教程》——6.1节ImageView界面组件——显示图像

6.1 ImageView界面组件--显示图像Android开发基础教程ImageView界面组件主要用以显示图像,让显示画面更加美观和生动. 6.1.1 ImageView的语法与常用属性1.ImageView的语法在Andrioid程序中使用图像图片有以下几个注意事项. (1)图像图片必须根据使用的分辨率,分别放置在.或中.但如果没有那么讲究,可以直接放置在的目录中. (2)程序的图像文件格式可以使用png.jpg或gif,要注意的是文件命名时无论文件名或扩展名都必须使用小写字母,否则执行时

《Android开发基础教程》——6.2节Gallery界面组件——画廊展示

6.2 Gallery界面组件--画廊展示 Android开发基础教程 Gallery组件的展示方式是将图片从左到右的方式排列,如同画廊放置作品一样.但是较为特殊的是Gallery组件支持手指左右拖曳滑动的效果,并且可以选择指定的图片,从界面布局来看是相当灵活而有用的组件. 6.2.1 Gallery语法示例与常用的属性 例如:我们要创建一个Gallery组件,名称为"Gallery01",Gallery组件和边界的距离是5dp,图片间的间隔是2dp,宽度填满整个屏幕,高度根据图片高度

《Android开发基础教程》——6.3节GridView界面组件——表格展示

6.3 GridView界面组件--表格展示 Android开发基础教程 GridView界面组件是在表格中放置图片进行展示,在设置时的重点是规定每一行的字段数,图片展示时会根据列自动折行显示. 6.3.1 GridView语法示例与常用的属性 例如:我们要创建一个名称为"GridView01"的GridView组件,每行有3张图片,Gallery组件和边界的距离是20dp,图片的水平和垂直间隔是6dp,宽度填满整个屏幕,高度根据图片高度调整. <GridView android

《Android开发基础教程》——扩展练习

扩展练习Android开发基础教程1.利用ImageView显示书籍图片,点击下一张按钮依次显示下一张的书籍图片并在TextView组件上显示书籍的说明,如果图片已到最后一张,则循环到第一张. 2.使用Gallery组件显示书籍图片行,Gallery也可以循环显示,当在Gallery组件中选中指定的书籍图片,同时会在下方的ImageView组件显示完整的图片,并在TextView组件上显示书籍的说明.

Android平台基于Pull方式对XML文件解析与写入方法详解_Android

本文详细讲述了Android平台基于Pull方式对XML文件解析与写入方法.分享给大家供大家参考,具体如下: XML技术在跨平台的情况下的数据交互中得到了广泛的应用,假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通过XML文件可以很方便的在Android平台和服务器之间进行数据传输,具体实现涉及到对XML文件进行解析及写入的技术.本文实现在Android平台上基于Pull方式对XML文件解析的技术. XmlPullParser是一个Java实现的开源API包(源码下载地

Android平台基于Pull方式对XML文件解析与写入方法详解

本文详细讲述了Android平台基于Pull方式对XML文件解析与写入方法.分享给大家供大家参考,具体如下: XML技术在跨平台的情况下的数据交互中得到了广泛的应用,假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通过XML文件可以很方便的在Android平台和服务器之间进行数据传输,具体实现涉及到对XML文件进行解析及写入的技术.本文实现在Android平台上基于Pull方式对XML文件解析的技术. XmlPullParser是一个Java实现的开源API包(源码下载地

Android播放视频的三种方式_Android

在Android中,我们有三种方式来实现视频的播放: 1).使用其自带的播放器.指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型. 2).使用VideoView来播放.在布局文件中使用VideoView结合MediaController来实现对其控制. 3).使用MediaPlayer类和SurfaceView来实现,这种方式很灵活. 1.调用其自带的播放器: Uriuri = Uri.parse(Environment.getExternalStorageD

《Android开发基础教程》——导读

目 录 第6章 图片相关界面组件 第1章 敲开Android的开发大门第2章 Android,我来了第3章 认识基本的界面组件第4章 消息显示相关组件第5章 单选.复选和下拉列表第6章 图片相关界面组件6.1 ImageView界面组件--显示图像 6.2 Gallery界面组件--画廊展示 6.3 GridView界面组件--表格展示 扩展练习第7章 ListView界面组件第8章 菜单组件第9章 Intent的使用第10章 Activity的生命周期第11章 程序调试及代码段第12章 数据的