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. Hadoop入门进阶课程11--Sqoop介绍、安装与操作

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  2. 受限玻尔兹曼机(RBM)学习笔记(六)对比散度算法

      去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算 ...

  3. UWP开发入门(十四)—— UserControl中Adaptive UI的小技巧

    本篇我们通过绘制一个非常简单的UserControl控件,来分享一下对Adaptive UI的理解及一些图形绘制的技巧. 现在流行的APP都少不了精致的用户头像,首先假设我们需要绘制如下的图形作为默认 ...

  4. HT全矢量化的图形组件设计

    HT一直被客户称道的就是其全矢量化的设计特色,矢量相比传统图片好处太多了: 矢量可无级缩放,界面不失真不模糊 描述矢量的文本内容远比图片小得多 目前各种window.devicePixelRatio不 ...

  5. 数论 - n元线性同余方程的解法

    note:n元线性同余方程因其编程的特殊性,一般在acm中用的很少,这里只是出于兴趣学了一下 n元线性同余方程的概念: 形如:(a1*x1+a2*x2+....+an*xn)%m=b%m       ...

  6. 扩展KMP --- HDU 3613 Best Reward

    Best Reward Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3613 Mean: 给你一个字符串,每个字符都有一个权 ...

  7. .Net实现微信公众平台开发接口(三) 之 “信息回复”

    对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本.图片.图文.语音.视频.音乐).请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器 ...

  8. jquery ajax跨域访问webservice配置

    1.webservice方法 [System.Web.Script.Services.ScriptService] public class TestService : System.Web.Serv ...

  9. 造完美的go开发环境

    http://www.cnblogs.com/qgymje/p/3912259.html   这篇原来是给公司里使用go开发的交流用的,主要是工具的安装,用markdown写的,发布了内部gitlab ...

  10. POJ 3761 Bubble Sort 快速幂取模+组合数学

    转载于:http://www.cnblogs.com/767355675hutaishi/p/3873770.html 题目大意:众所周知冒泡排序算法多数情况下不能只扫描一遍就结束排序,而是要扫描好几 ...