Android进阶_XML解析pull解析,使用反射
来源:互联网 发布:淘宝余姚司法拍卖网 编辑:程序博客网 时间:2024/06/15 21:01
明天==明年了,今天写一个工具方法,明年用
项目中使用了一个牛叉的方法解析xml,使用麻烦,速度又慢。为项目中独特解析方式写的工具方法就不拿出来了,大同小异,就是xml解析不一样,试用了getDeclaredFields获取bean中的字段
在解析json的时候好多的第三方可以一行代码解析数据,相当好用,解析xml使用第三方也是比较麻烦,写个工具类,来一句话解析xml
Java与Android之间反射有点区别:
*1、Android中java.beans包没了,通过使用PropertyDescriptor类来调用get/set方法没法用了
2、Field[] fields = cla.getDeclaredFields();在Java中是按照字段定义顺序,而在Android中获取到的字段数组是排序过后的,据前辈猜测是jvm的原因。*
xml中几个特殊字符对应的转义:
// < – <
// > – >
// & – &
// ” – "
// ’ – '
调用:
数据bean中都是String类型的,要有别的类型再getType处理,
只拿到节点文本,没有拿节点属性,项目中的xml没有属性
// 如果约定好了,第二个参数可以直接在方法中写死List<DbsxBean> datas2 = parseResultPull(result, "OBJ", DbsxBean.class);
/** * XML解析 * * @author ztt * @Title: parseResultPull * @Description: * @param @param result 返回值 * @param @param objTag 数据对象节点 * @param @param cla 数据bean * @return List<T> 返回数据集合 * @date 2015-12-31 */ public <T> List<T> parseResultPull(String result,String objTag,Class<T> cla) { List<T> datas = new ArrayList<T>(); XmlPullParserFactory xmlPullParserFactory = null; XmlPullParser xmlPullParser = null; int eventType = 0; String nodeName = ""; try { xmlPullParserFactory = XmlPullParserFactory.newInstance(); xmlPullParser = xmlPullParserFactory.newPullParser(); xmlPullParser.setInput(new StringReader(result)); eventType = xmlPullParser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) {// 文档结束标记 if (eventType == XmlPullParser.START_TAG && objTag.equals(nodeName)) { T t = cla.newInstance(); // 反射创建一个对象 eventType = xmlPullParser.next(); // 切换到下一个节点(开始节点,Text内容节点,结束节点) nodeName = xmlPullParser.getName(); // 获取节点名字,内容节点返回null while (!(eventType == XmlPullParser.END_TAG || objTag.equals(nodeName))) { if (eventType == XmlPullParser.START_TAG && !TextUtils.isEmpty(nodeName)) { Method meth = cla.getMethod("set" + firstUpcase(nodeName), String.class); meth.invoke(t, xmlPullParser.nextText()); } eventType = xmlPullParser.next(); nodeName = xmlPullParser.getName(); } datas.add(t); } eventType = xmlPullParser.next(); nodeName = xmlPullParser.getName(); } } catch (Exception e) { throw new Error("xml PULL 解析出现错误"); } return datas; } /** * 将第一个字母转成大写 * @date 2015-12-31 */ public String firstUpcase(String data) { return TextUtils.isEmpty(data) ? "" : data.substring(0,1).toUpperCase(Locale.getDefault())+data.substring(1); }
数据bean:
package com.ztt.tax.bean;public class DbsxBean { private String SFZH = null; private String YHDM = null; private String TXNR = null; private String TXSJ = null; private String BZ1 = null; private String BZ2 = null; private String BZ3 = null; private String PATHXX = null; private String RN = null; public DbsxBean(String sFZH, String yHDM, String tXNR, String tXSJ, String bZ1, String bZ2, String bZ3, String pATHXX, String rN) { super(); SFZH = sFZH; YHDM = yHDM; TXNR = tXNR; TXSJ = tXSJ; BZ1 = bZ1; BZ2 = bZ2; BZ3 = bZ3; PATHXX = pATHXX; RN = rN; } public DbsxBean() { super(); } public String getSFZH() { return SFZH; } public void setSFZH(String sFZH) { SFZH = sFZH; } public String getYHDM() { return YHDM; } public void setYHDM(String yHDM) { YHDM = yHDM; } public String getTXNR() { return TXNR; } public void setTXNR(String tXNR) { TXNR = tXNR; } public String getTXSJ() { return TXSJ; } public void setTXSJ(String tXSJ) { TXSJ = tXSJ; } public String getBZ1() { return BZ1; } public void setBZ1(String bZ1) { BZ1 = bZ1; } public String getBZ2() { return BZ2; } public void setBZ2(String bZ2) { BZ2 = bZ2; } public String getBZ3() { return BZ3; } public void setBZ3(String bZ3) { BZ3 = bZ3; } public String getPATHXX() { return PATHXX; } public void setPATHXX(String pATHXX) { PATHXX = pATHXX; } public String getRN() { return RN; } public void setRN(String rN) { RN = rN; } @Override public String toString() { return "SFZH," + SFZH + ",YHDM" + YHDM + ",TXNR" + TXNR + ",TXSJ" + TXSJ + ",BZ1" + BZ1 + ",BZ2" + BZ2 + ",BZ3" + BZ3 + ",PATHXX" + PATHXX + ",RN" + RN; }}
数据源格式:直接用的项目中的接口,地址不能给出,数据已修改
<?xml version="1.0" encoding="UTF-8"?><xml> <code>100</code> <totlecount>15</totlecount> <OBJ> <SFZH>98302342341</SFZH> <YHDM>98asdf</YHDM> <TXNR>个人工作任务已提交,请您及时审核!</TXNR> <TXSJ>2015-12-30 09:42:34</TXSJ> <BZ1></BZ1> <BZ2></BZ2> <BZ3></BZ3> <PATHXX>/individual0afea459296fd6a1a2be53acf&dbId=db9e865a508b4b86b7b6bd5d631d68ca</PATHXX> <RN>1</RN> </OBJ></xml>
0 0
- Android进阶_XML解析pull解析,使用反射
- Android开发_XML的解析
- android使用pull解析xml
- android使用pull解析xml
- Android使用pull解析xml
- android xml使用pull解析
- Android使用pull解析xml
- Android使用pull解析xml
- Android开发进阶(六)--原始XML文件的使用以及PULL解析小例
- Android进阶——使用Pull解析和生成轻量级数据XML
- Android开发进阶(六)--PULL模式解析XML文件
- Android基础_Xml的Pull解析/安卓中的数据库以及实例化数据库的第三方框架Litepal(五)
- android 使用 pull 解析xml文件
- android使用pull方式解析xml
- android 使用 pull 解析xml文件
- android使用pull的方式解析xml
- android Pull解析xml 使用小结
- android 使用pull方式解析xml文件
- UML遗留问题总结
- HA 模式下的 Hadoop+ZooKeeper+HBase 启动关闭管理脚本
- VirtualBox安装后影响另一个应用程序的启动
- 【MFC】容器类的使用
- PLSQL编写函数--例子
- Android进阶_XML解析pull解析,使用反射
- c++基础--指针
- Android的性能优化方法
- gwt调用iframe的方法和变量
- 解决Zxing解析本地图片二维码,识别率低,识别不出来的问题!
- i2c buss(i2c-core.c)
- C# String类常用的方法的使用
- Loader框架
- Cyapi使用心得