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的更多相关文章

  1. android network develop(1)----doing network background

    Develop network with HttpURLConnection & HttpClient. HttpURLConnection  is lightweight with Http ...

  2. android network develop(2)----network status check

    Check & Get network status Normally, there will be two type with phone network: wifi & mobil ...

  3. Android中用PULL解析XML

    解析XML的方式有DOM,SAX,PULL,那为什么要在Android中使用PULL解析呢?首先来说一下PULL解析的优点,然后再说一下其他两种解析方式的缺点,答案就清晰可见啦. DOM不适合文档较大 ...

  4. (转载)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 ...

  5. Android 数据存储(XML解析)

      在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在android中如何解析xml文件数据 ...

  6. Android项目部署时,发生AndroidRuntime:android.view.InflateException: Binary XML file line #168: Error inflating class错误

    这个错误也是让我纠结了一天,当时写的项目在安卓虚拟机上运行都很正常,于是当我部署到安卓手机上时,点击登陆按钮跳转到用户主界面的时候直接结束运行返回登陆界面.    当时,我仔细检查了一下自己的代码,并 ...

  7. 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 ...

  8. Android color(颜色) 在XML文件和java代码中

    Android color(颜色) 在XML文件和java代码中,有需要的朋友可以参考下. 1.使用Color类的常量,如: int color = Color.BLUE;//创建一个蓝色 是使用An ...

  9. 【转】android颜色对应的xml配置值

    原文网址:http://www.cnblogs.com/etgyd/archive/2011/04/02/2003778.html android颜色对应的xml配置值 <?xml versio ...

随机推荐

  1. iOS- NSDateFormatter (自定义时间格式)

    一. NSDateFormatter解释 1. 日期(NSDate)是NSString类的格式(stringWithFormat),也可以改变输出,如果需要输出年代信息等则需要进行转换,等等. 2.  ...

  2. iOS-AFNetworking-上传图片

    一.AFNetworking上传图片 /** 需要Demo,可留言 */ 1.利用AFnetworking上传图片. 2.注意将UIImage类型转化为NSData类型,传给后台. 二.Demo // ...

  3. Android Http请求

    Android HTTP请求封装代码 /** * This class is the Utils of other classes. */ public class HttpUtil { /** 变量 ...

  4. ChartDirector应用笔记(一)

    ChartDirector介绍 ChartDirector是一款小巧精细的商业图表库.其适用的语言范围非常广泛,包括.Net, Java, Asp, VB, PHP, Python, Ruby, C+ ...

  5. 搜索 + 剪枝 --- POJ 1101 : Sticks

    Sticks Problem's Link:   http://poj.org/problem?id=1011 Mean: http://poj.org/problem?id=1011&lan ...

  6. 网狐6603手机棋牌游戏源码.rar

    网狐6603手机棋牌游戏源码.rar   文件大小: 333 MB 发布一款手机棋牌游戏源码带教程文档! 仅供学习,下载后请务必在24小时内删除! 网狐6603手机棋牌游戏源码 链接:http://p ...

  7. C#设计模式——命令模式(Command Pattern)

    一.概述通常来说,“行为请求者”与“行为实现者”是紧耦合的.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这些情况下,将“行为请求者”与“行为实 ...

  8. [转]easyui datagrid 批量编辑和提交

    web前台主要代码: <script type="text/javascript"> $(function() { var $dg = $("#dg" ...

  9. H5案例学习笔记

    ★基础篇     增加主体结构元素    

  10. C#代码反编译 得到项目可运行源码

    C#代码反编译 得到项目可运行源码 摘自:http://www.cnblogs.com/know/archive/2011/03/15/1985026.html 谈到"C#代码反编译&quo ...