android network develop(3)----Xml Parser
Normally, there are three type parser in android. Xmlpullparser, DOM & SAX.
Google recomand Xmlpullparser to doing this.
But to parser xml files or inputstream, it based on xml content.
So using an general way to parser xml.
BaseXmlObj:
/*********************************************************** *@description : This class function is TODO * * @create author : deman.lu * @create date :2015-07-15 * @modify author : * @modify date : * @contact: joyfulmath.china@gmail.com * **********************************************************/
package com.joyfulmath.androidstudy.connect.xmlparser; import java.lang.reflect.Field; public abstract class BaseXmlObj {
public abstract String[] getNodes(); public void setParamater(String tag, Object value) { try { Field field = getClass().getField(tag); field.setAccessible(true); field.set(this, value); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }
}
/*********************************************************** *@description : This class function is TODO * * @create author : deman.lu * @create date :2015-07-15 * @modify author : * @modify date : * @contact: joyfulmath.china@gmail.com * **********************************************************/ package com.joyfulmath.androidstudy.connect.xmlparser; import java.io.InputStream; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory; import android.content.res.XmlResourceParser; public class XmlParserUtils { private static String encode = "utf-8";
public static XmlPullParser pullParser;
static { try {
pullParser = XmlPullParserFactory.newInstance().newPullParser();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
} /**
*
* @description :解析节点中的内容,封装成对象模型。
*
* @author : deman.lu
*
* @create :2015-07-15
*
* @param in network data contains xml
*
* @param obj
*
* @throws Exception
*
* @return :T extends BaseXmlObj
*/
public static <T extends BaseXmlObj> void streamText2Model(InputStream in,
T obj) throws Exception { pullParser.setInput(in, encode);
int eventType = pullParser.getEventType();
String[] nodes = obj.getNodes();
String nodeName = null;
boolean success = true; while (eventType != XmlPullParser.END_DOCUMENT && success) { switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break; case XmlPullParser.START_TAG:
nodeName = pullParser.getName();
break; case XmlPullParser.TEXT:
for (int i = 0; i < nodes.length; i++) {
if (nodes[i].equals(nodeName)) {
obj.setParamater(nodeName, pullParser.getText());
}
}
break; case XmlPullParser.END_TAG:
break;
} eventType = pullParser.next();
}
} /**
*
* @description :解析节点中的内容,封装成对象模型。
*
* @author : deman.lu
*
* @create :2015-07-15
*
* @param resParser XmlResourceParser read form resource
*
* @param obj
*
* @throws Exception
*
* @return :void
*/
public static <T extends BaseXmlObj> void streamText2Model(XmlResourceParser resParser,
T obj) throws Exception { int eventType = resParser.getEventType();
String[] nodes = obj.getNodes();
String nodeName = null;
boolean success = true; while (eventType != XmlPullParser.END_DOCUMENT && success) { switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break; case XmlPullParser.START_TAG:
nodeName = resParser.getName();
break; case XmlPullParser.TEXT:
for (int i = 0; i < nodes.length; i++) {
if (nodes[i].equals(nodeName)) {
obj.setParamater(nodeName, resParser.getText());
}
}
break; case XmlPullParser.END_TAG:
break;
} eventType = resParser.next();
}
} }
we using reflect, but if xml is complex, the efficiency may be low.
The way should be decided.
package com.joyfulmath.androidstudy.connect;
import java.io.Serializable;
import com.joyfulmath.androidstudy.connect.xmlparser.BaseXmlObj;
public class Student extends BaseXmlObj implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public String GradeID, GradeName, ClassID, ClassName, UserID, UserName;
public Student() {
}
@Override
public String[] getNodes() {
return new String[] { "GradeID", "GradeName", "ClassID", "ClassName", "UserID", "UserName" };
}
@Override
public String toString() {
String su = "@student:"+"GradeID:"+GradeID
+"GradeName:"+GradeName
+"ClassID:"+ClassID
+"ClassName:"+ClassName
+"UserID:"+UserID
+"UserName:"+UserName;
return NetWorkUtils.replaceBlank(su);
}
}
package com.joyfulmath.androidstudy.connect; import com.joyfulmath.androidstudy.connect.xmlparser.XmlParserUtils; import android.content.Context;
import android.content.res.XmlResourceParser; public class XmlParserDemo { public static Student parserStudentXml(Context context,int resId)
{
try {
Student student = new Student();
XmlResourceParser xml = context.getResources()
.getXml(resId);
XmlParserUtils.streamText2Model(xml, student);
xml.close();
return student;
} catch (Exception e) {
e.printStackTrace();
} return null; }
}
<?xml version="1.0" encoding="UTF-8"?>
<DsXml> <IsLog>
true </IsLog> <GradeID>
10001 </GradeID> <GradeName>
高一年级 </GradeName> <ClassID>
10010 </ClassID> <ClassName>
高一(01)班 </ClassName> <UserID>
10000 </UserID> <UserName>
张三 </UserName> </DsXml>
转载:http://www.cnblogs.com/vanezkw/archive/2013/03/03/2941496.html
android network develop(3)----Xml Parser的更多相关文章
- android network develop(1)----doing network background
Develop network with HttpURLConnection & HttpClient. HttpURLConnection is lightweight with Http ...
- android network develop(2)----network status check
Check & Get network status Normally, there will be two type with phone network: wifi & mobil ...
- Android中用PULL解析XML
解析XML的方式有DOM,SAX,PULL,那为什么要在Android中使用PULL解析呢?首先来说一下PULL解析的优点,然后再说一下其他两种解析方式的缺点,答案就清晰可见啦. DOM不适合文档较大 ...
- (转载)XML Tutorial for iOS: How To Choose The Best XML Parser for Your iPhone Project
There are a lot of options when it comes to parsing XML on the iPhone. The iPhone SDK comes with two ...
- Android 数据存储(XML解析)
在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在android中如何解析xml文件数据 ...
- Android项目部署时,发生AndroidRuntime:android.view.InflateException: Binary XML file line #168: Error inflating class错误
这个错误也是让我纠结了一天,当时写的项目在安卓虚拟机上运行都很正常,于是当我部署到安卓手机上时,点击登陆按钮跳转到用户主界面的时候直接结束运行返回登陆界面. 当时,我仔细检查了一下自己的代码,并 ...
- bug_ _ android.view.InflateException: Binary XML file line #2: Error inflating class <unknown
========= 5.0 android异常“android.view.InflateException: Binary XML file line # : Error inflating ...
- Android color(颜色) 在XML文件和java代码中
Android color(颜色) 在XML文件和java代码中,有需要的朋友可以参考下. 1.使用Color类的常量,如: int color = Color.BLUE;//创建一个蓝色 是使用An ...
- 【转】android颜色对应的xml配置值
原文网址:http://www.cnblogs.com/etgyd/archive/2011/04/02/2003778.html android颜色对应的xml配置值 <?xml versio ...
随机推荐
- 通过python切换hosts文件
做开发或测试时常需要切换hosts ,如果hosts比较多,那么频繁的打开hosts文件对地址加注释(#),再把去掉注释是个繁琐的事情. 当然,SwitchHosts 已经可以帮我们方便的解决了这个繁 ...
- iOS-布局-Masonry-优先级
一.AutoLayout有两个重要的属性: 1.Content Compression Resistance 百度翻译(内容压缩抗力) 2.Content Hugging 百度翻译(内容拥抱) ...
- 浅析LRU(K-V)缓存
LRU(Least Recently Used)算法是缓存技术中的一种常见思想,顾名思义,最近最少使用,也就是说有两个维度来衡量,一个是时间(最近),一个频率(最少).如果需要按优先级来对缓存中的K- ...
- cocos2dx-3.x 导出自定义类到 lua 过程详解
转载请注明出处:http://www.cnblogs.com/Ray1024 一.简介 最近正在学习cocos2d中的lua游戏开发,因为lua开发的热更新特性,大家开发游戏好像都会优先选择lua作为 ...
- MQTT协议学习笔记
1.前沿 万物联网的时代即将到来,物联网也由当初的概念开始进一步落实.随着无线网络技术飞速发展,各种设备都可以连接网络,实现远程控制.例如智能家居最近非常火爆,智能插座.智能LED灯.智能摄像头等.在 ...
- SystemTap知识(一)
SystemTap是一个系统的跟踪探测工具.它能让用户来跟踪和研究计算机系统在底层的实现. 安装SystemTap需要为你的系统内核安装-devel,-debuginfo,-debuginfo-com ...
- ExtendHelper
public static class ExtendHelper { /// <summary> /// 检查当前字符串是否符合某种格式 /// </summary> /// ...
- IOS开发UI基础UIImagePickerController的属性
UIImagePickerController 1.+(BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType ...
- 四则运算APP(BUG发掘)
BUG: 1.有几率会出现一样的题目. 2.题目会出现两个一样的答案. 3.做题结束后不能返回主界面或者重新开始. 感想: 1.题目应该按年级分类出题. 2.主界面可以添加更多功能 如自己输入题目数, ...
- CCFlow SDK模式开发
需求: 1.业务数据要保存在我们自己的数据库里 2.CCFlow有保存草稿的功能,但是领导要求每个业务都要有草稿箱,流程从草稿箱发起,每个业务单独查询,而不要在CCFlow的统一界面查询,所以每 ...