xml多层嵌套解析方法SAX方式(包括网络请求)

启用异步类获取数据

package com.bwie.myasynctask;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.xml.sax.SAXException;

import com.bwie.http_img_xml_caipu.ItemActivity;
import com.bwie.myadapter.HomeAdapter;
import com.bwie.mydefaulthander.HomeDefaultHander;
import com.bwie.vo.DataVO;
import com.bwie.vo.StepsVO;

import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class MyAsyncTask extends AsyncTask<String, Integer, List<DataVO>> {
    private Context context;
    private ListView lv;
    private String str_ed;
    private List<DataVO> datalist;

public MyAsyncTask(Context context, ListView lv, String str_ed) {
        super();
        this.context = context;
        this.lv = lv;
        this.str_ed = str_ed;
    }

@Override
    protected List<DataVO> doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        HttpClient client=new DefaultHttpClient();
        HttpPost post=new HttpPost(arg0[0]);
        List<NameValuePair> list=new ArrayList<NameValuePair>();
        list.add(new BasicNameValuePair("key", "3a3d0fa15180459cbf022d5d77e50de5"));
        list.add(new BasicNameValuePair("menu", str_ed));
        list.add(new BasicNameValuePair("rn", "10"));
        list.add(new BasicNameValuePair("pn", "3"));
        list.add(new BasicNameValuePair("dtype", "xml"));
        try {
            UrlEncodedFormEntity entity=new UrlEncodedFormEntity(list,HTTP.UTF_8);
            post.setHeader("Content_Type", "application/x-www-form-urlencoded;charset=utf-8");
            post.setEntity(entity);
            HttpResponse response = client.execute(post);
            if (response.getStatusLine().getStatusCode()==200) {
                InputStream is=response.getEntity().getContent();
                SAXParserFactory factory=SAXParserFactory.newInstance();
                SAXParser parser=factory.newSAXParser();
                HomeDefaultHander dh=new HomeDefaultHander();
                parser.parse(is, dh);
                datalist = dh.getdatalist();
                
            }
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return datalist;
    }

@Override
    protected void onPostExecute(final List<DataVO> result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        lv.setAdapter(new HomeAdapter(context, result));
        lv.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(context, ItemActivity.class);
                intent.putExtra("list",(Serializable)result.get(arg2).steps);
                context.startActivity(intent);
            }
        });
    }

@Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
    }

@Override
    protected void onProgressUpdate(Integer... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
    }

}

自定义类

package com.bwie.mydefaulthander;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.util.Log;

import com.bwie.vo.DataVO;
import com.bwie.vo.StepsVO;

public class HomeDefaultHander extends DefaultHandler {
    private List<DataVO> data;
    private int mun=0;
    private String flag;
    private DataVO dataVO;
    private StepsVO stepsVO;
    //开始解析文档
    @Override
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.startDocument();
        data = new ArrayList<DataVO>();
        Log.e("TAG", "开始解析文档");
    }
    //开始解析标签
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        super.startElement(uri, localName, qName, attributes);
        Log.e("TAG", "解析标签开始");
        flag = localName;
        if (localName.equals("item")&&mun==0) {
            dataVO = new DataVO();
            mun=1;
        }else if (localName.equals("item")&&mun==2) {
            stepsVO = new StepsVO();
            mun=2;
        }else if(localName.equals("steps")){
            dataVO.steps=new ArrayList<StepsVO>();
            mun=2;
        }
    }
    //解析文本
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        super.characters(ch, start, length);
        String text=new String(ch, start, length);
        Log.e("TAG", "解析文本"+text);
        if (flag.equals("title")) {
            dataVO.setTitle(text);
        } else if (flag.equals("tags")){
            dataVO.setTags(text);
        }else if (flag.equals("imtro")){
            dataVO.setImtro(text);
        }else if (flag.equals("ingredients")){
            dataVO.setIngredients(text);
        }else if (flag.equals("burden")){
            dataVO.setBurden(text);
        }else if (flag.equals("item")&&mun==1){
            dataVO.setAlbums(text);
        }else if (flag.equals("img")){
            stepsVO.setImg(text);
        }else if (flag.equals("step")){
            stepsVO.setStep(text);
        }
    }
    //解析标签结束
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        // TODO Auto-generated method stub
        super.endElement(uri, localName, qName);
        if (localName.equals("item")&&mun==2) {
            dataVO.steps.add(stepsVO);
            mun=2;
        }else if(localName.equals("item")&&mun==0){
            data.add(dataVO);
            mun=0;
        }else if(localName.equals("steps")){
            mun=0;
        }
        flag="";
    }
    //解析文档结束
    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument();
    }
    //得到外层集合
    public List<DataVO> getdatalist(){
        return data;
        
    }

}

时间: 2024-08-04 03:46:26

xml多层嵌套解析方法SAX方式(包括网络请求)的相关文章

[C# | XML] XML 反序列化解析错误:&lt;xml xmlns=&#39;&#39;&gt; was not expected. 附通用XML到类解析方法

使用 XML 反化时出现错误: public static TResult GetObjectFromXml<TResult>(string xmlString) { TResult result; XmlSerializer serializer = new XmlSerializer(typeof(TResult), new XmlRootAttribute("xml")); using (TextReader tr = new StringReader(xmlStri

网络相关系列之四:数据解析之SAX方式解析XML数据

一.XML和Json数据的引入: 通常情况下.每一个须要訪问网络的应用程序都会有一个自己的server.我们能够向server提交数据,也能够从server获取数据.只是这个时候就有一个问题,这些数据是以什么格式在网络上传输的呢?一般我们都会在网络上传输一些格式化后的数据,这样的数据会有一定的结构规格和语言,当还有一方收到数据消息后就能够依照同样的结构规格进行解析.从而取出它想要的那部分内容. 在网络上数据传输最经常使用的格式:XML和Json.本文就来学习一下XML数据的解析,Json格式的数

java解析XML① 之DOM解析和SAX解析(包含CDATA的问题)

Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电影院看电影一样,从头到尾看一遍,不能回退(Dom可来来回回读取),在看电影的过程中,每遇到一个情节,都会调用大脑去接收处理这些信息.SAX也是相同的原理,每遇到一个元素节点,都会调用相应的方法来处理.在SAX的解析过程中,读取到文档开头.文档结尾,元素的开头和元素结尾都会调用相应方法,我们可以在这些

iOS 网络与多线程--3.异步Get方式的网络请求(非阻塞)

通过Get请求方式,异步获取网络数据,异步请求不会阻塞主线程(用户界面不会卡死),而会建立一个新的线程. 代码如下 ViewController.h文件 1 // 2 // ViewController.h 3 // AppDemo 4 // 5 // Created by JinXin on 15/12/2. 6 // Copyright © 2015年 xx. All rights reserved. 7 // 8 9 #import <UIKit/UIKit.h> 10 11 // 1.

四种网络请求的方式封装网络请求

封装网络请求类便捷, 适合多个地方使用. 第一封装下载方法 前提用Cocoapods或者直接引用第三方AFNetWorking 定义一个类NetWorkingManager, 继承于NSObject A: 在.h中写方法声明 #import <Foundation/Foundation.h> @interface NetWorkManager : NSObject - (void)downLoadWithUrl:(NSString *)url progress:(void(^)(float p

iOS 网络与多线程--4.同步Post方式的网络请求

通过Post请求方式,同步获取网络数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据 在ViewController.m文件内的viewDidLoad函数添加一下测试代码 1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 // Do any additional setup after loading the view, typically from a nib. 4 5 // 1.建立一个网址对象,指定请求数据的网址 6 NSURL

Android fastjson多层嵌套解析出错解决方法

这几天做项目的时候,用了3层嵌套,其实不管几层嵌套,只需要注意以下几点: 1.内部嵌套的类必须是static的,要不然解析会出错: 2.类里面的属性名必须跟Json字段里面的Key是一模一样的: 我就是遇到了第1种情况,bean怎么看都是对的,但是fastjson就是报解析错误!! gson也是一样!! 在这里给大家分享下.  毕竟fastjson的文档比较少.

Android开发:JSON简介及最全面解析方法(Gson、AS自带org.json、Jackson解析)

前言 今天,我们来介绍现今主流的数据交换格式-JSON! 同样作为主流为数据交换格式-XML,如果有兴趣可以阅读我写的XML及其DOM.SAX.PULL解析方法和对比 目录 JSON简介&解析方法介绍.png 定义 JavaScript Object Notation,JavaScript的对象表示法,是一种轻量级的文本数据交换格式. 作用 用于数据的标记.存储和传输. 特点 轻量级的文本数据交换格式 独立于语言和平台 具有自我描述性 读写速度快,解析简单 语法 JSON值 名称/值 数组 对象

怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率

在寻常的开发中常常会有非常多列表页面.每做一个列表页就须要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件. 假设版本号更新迭代比較频繁,如此以往,就会使项目project变得无比庞大臃肿. 假设看过这篇文章或者在使用过这样的方式之后呢,全部的工作都能够被压缩成仅仅有两个文件,一个JAVA文件一个XML布局文件. 并且代码还少少的. 咱们来看看实际情况: 寻常的一个列表页面的生成须要下面文件: 一个Activity文件.有时候可能还会忘记注冊 一个包括上下拉