国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android開發(fā)中解析xml文件XmlUtils工具類與用法示例

2019-12-12 01:19:45
字體:
供稿:網(wǎng)友

本文實例講述了Android開發(fā)中解析xml文件XmlUtils工具類與用法。分享給大家供大家參考,具體如下:

1. xmlUtil工具類

package com.example.xmlpaserutil.util;import java.io.InputStream;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import android.util.Log;import android.util.Xml;public class XmlUtil<T> {/*** 解析XML轉(zhuǎn)換成對象** @param is*      輸入流* @param clazz*      對象Class* @param fields*      字段集合一一對應節(jié)點集合* @param elements  //d(這兩行標紅,是因為這兩個是java中字段和xml文件中的字段對應)隊醫(yī)*      節(jié)點集合一一對應字段集合* @param itemElement*      每一項的節(jié)點標簽* @return*///靜態(tài)方法中加入泛型,需要申明<T>,如果不是對泛型不是很熟悉,可以先用Object代替,然后再換回來public static <T> List<T> parse(InputStream is, Class<T> clazz,List<String> fields, List<String> elements, String itemElement) {Log.v("rss", "開始解析XML.");List<T> list = new ArrayList<T>();try {XmlPullParser xmlPullParser = Xml.newPullParser();xmlPullParser.setInput(is, "UTF-8");int event = xmlPullParser.getEventType();T obj = null;while (event != XmlPullParser.END_DOCUMENT) {switch (event) {case XmlPullParser.START_TAG:if (itemElement.equals(xmlPullParser.getName())) {obj = clazz.newInstance();}if (obj != null&& elements.contains(xmlPullParser.getName())) {setFieldValue(obj, fields.get(elements.indexOf(xmlPullParser.getName())),xmlPullParser.nextText());}break;case XmlPullParser.END_TAG:if (itemElement.equals(xmlPullParser.getName())) {list.add(obj);obj = null;}break;}event = xmlPullParser.next();}} catch (Exception e) {Log.e("rss", "解析XML異常:" + e.getMessage());throw new RuntimeException("解析XML異常:" + e.getMessage());}return list;}/*** 設置字段值** @param propertyName*      字段名* @param obj*      實例對象* @param value*      新的字段值* @return*/public static void setFieldValue(Object obj, String propertyName,Object value) {try {Field field = obj.getClass().getDeclaredField(propertyName);field.setAccessible(true);field.set(obj, value);} catch (Exception ex) {throw new RuntimeException();}}}

2. MainActivity的調(diào)用

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);InputStream in = null;try {in =getResources().getAssets().open("User.xml");//如果說要獲取到File對象的話,獲取assert文件中的文件//File file =new File("file:///android_asset/User.xml");} catch (Exception e) {e.printStackTrace();}List <String > fields =new ArrayList<String>();List <String > elements =new ArrayList<String>();fields.add("name");fields.add("age");elements.add("name");elements.add("age");List<User> users = XmlUtil.parse(in, User.class, fields, elements, "User");for (Object object : users) {System.out.println(object.toString());}}

3. xlm文件中的寫法(這里解析出來是一個集合)

<?xml version="1.0" encoding="UTF-8"?><Users> <User>  <name>張三</name>  <age>20</age> </User> <User>  <name>李四</name>  <age>21</age> </User> <User>  <name>王五</name>  <age>22</age> </User></Users>

這里是我參考的

/** * 解析XML工具類 */public class XmlUtils {  /**   * 解析XML轉(zhuǎn)換成對象   *   * @param is   *      輸入流   * @param clazz   *      對象Class   * @param fields   *      字段集合一一對應節(jié)點集合   * @param elements   *      節(jié)點集合一一對應字段集合   * @param itemElement   *      每一項的節(jié)點標簽   * @return   */  public static List<Object> parse(InputStream is, Class<?> clazz,      List<String> fields, List<String> elements, String itemElement) {    Log.v("rss", "開始解析XML.");    List<Object> list = new ArrayList<Object>();    try {      XmlPullParser xmlPullParser = Xml.newPullParser();      xmlPullParser.setInput(is, "UTF-8");      int event = xmlPullParser.getEventType();      Object obj = null;      while (event != XmlPullParser.END_DOCUMENT) {        switch (event) {        case XmlPullParser.START_TAG:          if (itemElement.equals(xmlPullParser.getName())) {            obj = clazz.newInstance();          }          if (obj != null              && elements.contains(xmlPullParser.getName())) {            setFieldValue(obj, fields.get(elements                .indexOf(xmlPullParser.getName())),                xmlPullParser.nextText());          }          break;        case XmlPullParser.END_TAG:          if (itemElement.equals(xmlPullParser.getName())) {            list.add(obj);            obj = null;          }          break;        }        event = xmlPullParser.next();      }    } catch (Exception e) {      Log.e("rss", "解析XML異常:" + e.getMessage());      throw new RuntimeException("解析XML異常:" + e.getMessage());    }    return list;  }  /**   * 設置字段值   *   * @param propertyName   *      字段名   * @param obj   *      實例對象   * @param value   *      新的字段值   * @return   */  public static void setFieldValue(Object obj, String propertyName,      Object value) {    try {      Field field = obj.getClass().getDeclaredField(propertyName);      field.setAccessible(true);      field.set(obj, value);    } catch (Exception ex) {      throw new RuntimeException();    }  }}

實體:

public class User{ private String name; private String age; get...set...}

XML:

<Users> <User>  <name>張三</name>  <age>20</age> </User> <User>  <name>李四</name>  <age>21</age> </User> <User>  <name>王五</name>  <age>22</age> </User></Users>

對應的參數(shù):

/*** 解析XML轉(zhuǎn)換成對象** @param is*      輸入流,這個就是XML文件的流* @param clazz*      對象Class,User類的class* @param fields*      字段集合一一對應節(jié)點集合,例如這個類就有兩個字段,name和age,放入     List中,放入的位置要和下面的XML節(jié)點的位置一一對應,List<String> fields = new ArrayList<String>();fields.add("name");fields.add("age");* @param elements*      節(jié)點集合一一對應字段集合,例如這個XML有兩個屬性,name和age,放入List中,放入的位置要和上面的實體屬性的位置一一對應,List<String> elements = new ArrayList<String>();fields.add("name");fields.add("age");* @param itemElement*      每一項的節(jié)點標簽,在XML中按哪個節(jié)點當成一組,這里是User* @return*/

PS:這里再為大家提供幾款關于xml操作的在線工具供大家參考使用:

在線XML/JSON互相轉(zhuǎn)換工具:
http://tools.VeVB.COm/code/xmljson

在線格式化XML/在線壓縮XML
http://tools.VeVB.COm/code/xmlformat

XML在線壓縮/格式化工具:
http://tools.VeVB.COm/code/xml_format_compress

XML代碼在線格式化美化工具:
http://tools.VeVB.COm/code/xmlcodeformat

更多關于Android相關內(nèi)容感興趣的讀者可查看本站專題:《Android操作XML數(shù)據(jù)技巧總結》、《Android資源操作技巧匯總》、《Android文件操作技巧匯總》、《Android開發(fā)入門與進階教程》、《Android視圖View技巧總結》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 五指山市| 新昌县| 长治县| 桂阳县| 酉阳| 万年县| 辽阳县| 奎屯市| 永泰县| 池州市| 集安市| 龙川县| 临朐县| 平阳县| 定边县| 长顺县| 平谷区| 清新县| 泸西县| 兰西县| 镶黄旗| 沁源县| 达拉特旗| 济源市| 安远县| 长乐市| 武平县| 桦川县| 潜山县| 库伦旗| 龙江县| 杭锦旗| 江油市| 静安区| 射洪县| 康乐县| 肃北| 灵丘县| 阿克陶县| 威海市| 偃师市|