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 ...
随机推荐
- install keepalived on RedHat/CentOS to provide IP failover for web cluster
Contents [hide] 1 Introduction 2 Our Sample Setup 3 Install Keepalived 4 Install Kernel Headers 5 C ...
- OpenGL开发环境配置-Windows/MinGW/Clion/CMake
因为某些原因,不想用过于臃肿的VS了,转而使用常用的jetbrains的CLion,Clion沿袭了jetbrans的优良传统,基本代码提示功能还是比较好的,不过就是对于windows不熟悉cmake ...
- EventBus初理解
缘由: 平时工作,因为懒于动笔的原因,也没注重技术和经验的积累,导致之前曾经研究过的问题现在又忘记了,所以要慢慢注重积累,那么就从写作开始,谈谈对工作中碰到的问题进行整理和归纳. 我们 ...
- IOS开发UI基础文本属性Attributes
文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSFontAttributeName : [UIFont systemFo ...
- 【rational rose】用例图
- [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务
除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...
- sprint3(第八天)
昨天忘了发博客,最近在整合前台和后台的内容,在sprint结束前应该能整合好,然后实现前后台的联系,实现点餐功能. 最近要准备大作业也要复习四六级考试,所以花在项目的时间比较少了,请老师谅解. 燃尽图
- SQL各种连接查询详解(左连接、右连接..)
一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的.语句1:隐式 ...
- Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录
在前面介绍了几篇关于我的权限系统改进的一些经验总结,本篇继续这一系列主体,介绍如何一行代码实现重要表的操作日志记录.我们知道,在很多业务系统里面,数据是很敏感的,特别对于一些增加.修改.删除等关键的操 ...
- oracle的minus返回第一个表中有、第二个表中没有的数据
oracle的minus返回第一个表中有.第二个表中没有的数据 CREATE TABLE hovertree_union_1 ( id INT, val ) ); CREATE TABLE hover ...