dom4j,sax,jdom,都能解析XML,不用自己写文本解析器。
json用jackson,或者google开源的json解析器都是OK的。

解决方案 »

  1.   

    很简单的数据一般直接读成数据流了   比较格式化的xml文件就用Dom解析吧 很简单的
    json没怎么用过  看别人用好像也就几行  没感觉
      

  2.   

    Android 下应该用 Pull,我刚写了一篇博客《Android 下用 Pull 解析和生成 XML》
    楼主可以看看:http://blog.csdn.net/joneeky/article/details/17080127
      

  3.   

    我一直在使用这种方式解析,但是由于XML结构很多,需要经常写,定义一个结构,就要写一个,很烦。
      

  4.   

    json的话jackson gson,xml的话jaxb
      

  5.   

    jaxb和gson都支持直接反序列化吗?而且支持列表吗?
      

  6.   

    根据放射机制,自己写点代码就好了呀
    /**
      * 把json转换成集合
      * @param jsonArr 可以是JSONObject对象或json字符串
      * @param clazz
      * @return
      * @throws Exception
      */
    public <T> List<T> jsonToList(Object jsonArr, Class clazz) throws Exception {
    List list = new ArrayList();
    JSONArray json = (jsonArr instanceof JSONArray ? (JSONArray) jsonArr : new JSONArray(jsonArr.toString()));
    for (int i = 0; i < json.length(); i++) {
    list.add(jsonToBean(json.get(i), clazz));
    }
    return list;
    }/**
     * 把json转换成对象
     * @param jsonObj 可以是JSONObject对象或json字符串
     * @param clazz
     * @return
     * @throws Exception
     */
    public <T> T jsonToBean(Object jsonObj, Class clazz) throws Exception {
    JSONObject json = (jsonObj instanceof JSONObject ? (JSONObject) jsonObj : new JSONObject(jsonObj.toString()));
    Object object = clazz.newInstance();Method[] methods = clazz.getMethods();
    for (int i = 0; i < methods.length; i++) {
    Object value = null;try {value = json.get(getProp(methods[i]));} catch (Exception e) {}
    setProp(methods[i], object, value);
    }
    return (T) object;
    }
    /**
     * 给对象的属性赋值
     * @param method
     * @param object
     * @param value
     * @return
     */
    public Object setProp(Method method, Object object, Object value) {
    if (null == method || null == object || null == value || !isPropMethod(method, SET_PROP)) {return object;}
    String pn = method.getParameterTypes()[0].getName(), val = value.toString();
    if (pn.equals("short") || pn.equals(Short.class.getName())) {
    try {method.invoke(object, Short.parseShort(val));} catch (Exception e) {}
    } else if (pn.equals("int") || pn.equals(Integer.class.getName())) {
    try {method.invoke(object, Integer.parseInt(val));} catch (Exception e) {}
    } else if (pn.equals("long") || pn.equals(Long.class.getName())) {
    try {method.invoke(object, Long.parseLong(val));} catch (Exception e) {}
    } else if (pn.equals(String.class.getName())) {
    try {method.invoke(object, val);} catch (Exception e) {}
    } else if (pn.equals("float") || pn.equals(Float.class.getName())) {
    try {method.invoke(object, Float.parseFloat(val));} catch (Exception e) {}
    } else if (pn.equals("double") || pn.equals(Double.class.getName())) {
    try {method.invoke(object, Double.parseDouble(val));} catch (Exception e) {}
    } else if (pn.equals(BigDecimal.class.getName())) {
    try {method.invoke(object, new BigDecimal(val));} catch (Exception e) {}
    } else if (pn.equals("boolean") || pn.equals(Boolean.class.getName())) {
    try {method.invoke(object, "1".equals(val) ? true : ("0".equals(val) ? false : Boolean.parseBoolean(val)));} catch (Exception e) {}
    } else if (pn.equals(Date.class.getName())) {
    try {
    if (value.getClass().getName().equals(Date.class.getName())) {
    method.invoke(object, value);
    } else {
    method.invoke(object, val.length() <= 10 ? DateUtil.get().formatDate().parse(val) : DateUtil.get().formatDateTime().parse(val));
    }
    } catch (Exception e) {}
    } else if (pn.equals(Map.class.getName())) {
    try {method.invoke(object, jsonToMap(value));} catch (Exception e) {}
    }
    return object;
    }
    /**
     * 根据set或get方法获得属性名称
     * @param method
     * @return
     */
    public String getProp(Method method) {
    if (isPropMethod(method, SET_PROP) || isPropMethod(method, GET_PROP)) {
    String mn = method.getName();
    return mn.substring(3, 4).toLowerCase() + mn.substring(4, mn.length());
    }
    return "";
    }