AndroidXml解析的三种方式list的转换

这篇博客介绍了Android中XML解析的三种主要方式:DOM、SAX和PULL。由于DOM解析会将整个文件树存储在内存中,不适合大文件,因此不推荐。SAX和PULL是基于事件驱动的解析方式,其中SAX解析在内存占用方面较为节省。作者分享了在Activity中的代码实现,并提醒注意网络权限问题。此外,博客还包含了XML布局代码示例和应用效果截图。
摘要由CSDN通过智能技术生成

从后台获取数据为XMl格式,就找了很多资料学习了下,
参考链接 参考链接
感谢博主:CodeYourSister!

安卓解析XMl主要通过三种方式: DOM, SAX,PULL;三种方式
其中大文件解析最好不要用 :DOM解析(文件树放在内存中,太占内存,不推荐)
SAX和Pull是基于事件驱动的;其中SAX解析方式是边下载边解析占用内存较少

下面上代码:activity中代码:

package com.btzh.myxmltest;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Attr;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   
    private TextView textView;
    private String httpStr = "http://10.27.7.162:8080/frame/lemeeting/getinforoom";
    private String httpStrtest = "https://mail.qq.com/cgi-bin/readmail?sid=344d6HuF5sEcSiJ6&mailid=ZC3331-E0L~tCfZQmW4DWU9gT9aT73&nocheckframe=true&t=attachpreviewer&select=1&selectfile=&seq=";
    ProgressDialog progressDialog;
    String Strhttp = "\n" +
            "<lemeeting>  <user>user9</user>  " +
            "<conf_room>    <conf_id>329</conf_id>    <conf_name>?????</conf_name>   " +
            " <start_time>2017-03-31 09:48:12</start_time>   " +
            " <end_time>2017-04-01 09:48:12</end_time>    " +
            "<conf_password>202cb962ac59075b964b07152d234b70</conf_password>   " +
            " <group_id>1</group_id>   " +
            " <world_id>600122</world_id>  </conf_room></lemeeting>";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView)findViewById(R.id.spyq_text);
        findViewById(R.id.spyq_list_btn).setOnClickListener(this);
        findViewById(R.id.spyq_DOM_btn).setOnClickListener(this);
        findViewById(R.id.spyq_SAX_btn).setOnClickListener(this);
        findViewById(R.id.spyq_Pull_btn).setOnClickListener(this);
        progressDialog = new ProgressDialog(this);
    }

    private void showProgressDialog(){
        if (null!=progressDialog){
            progressDialog.show();
        }
    }
    private void DismissProgressDialog(){
        if (null!=progressDialog){
            progressDialog.dismiss();
        }
    }
    //开启异步线程
    class Get_Result extends AsyncTask<String,Integer,String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            /* 设置进度条风格,风格为圆形,旋转的 */
            progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            /* 设置ProgressDialog 标题 */
            progressDialog.setTitle("提示");
            /* 设置ProgressDialog 提示信息 */
            progressDialog.setMessage("请稍后...");
            /* 设置ProgressDialog 的进度条是否不明确 */
            progressDialog.setIndeterminate(false);
            /* 设置ProgressDialog 是否可以按退回按键取消 */
            progressDialog.setCancelable(true);
            showProgressDialog();
        }

        @Override
        protected String doInBackground(String... params) {
            String getresult = http_get(httpStr);
            return getresult;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            DismissProgressDialog();
            //对异步获取的到Xml格式的数据进行解析
            saxParse(s);
        }
    }

    private void saxXmlParse(String XmlStr) {
        InputStream inputStream = null;
        try {
            inputStream = getResources().getAssets().open(XmlStr);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if(inputStream == null)
            return;

        final StringBuffer stringBuffer = new StringBuffer();
        SAXParserFactory factory = SAXParserFactory.newInstance();
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值