栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

详解Android之解析XML文件三种方式(DOM,PULL,SAX)

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

详解Android之解析XML文件三种方式(DOM,PULL,SAX)

1.xml文件代码


<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false" %>


      
 ${fq.content}
 
      
  

2.XML网页效果图

3.Android代码

1.布局文件




  

2.java代码

DOM解析代码

public class MainActivity extends AppCompatActivity {

  private ListView lv_main_list;
  private ProgressDialog progressDialog;
  private List fqs = new ArrayList<>();
  private MyAdapter myadapter;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lv_main_list = (ListView) findViewById(R.id.lv_main_list);

    myadapter = new MyAdapter();
    lv_main_list.setAdapter(myadapter);

    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("小青正在拼命加載中.....");
  }

  class MyAdapter extends baseAdapter{

    @Override
    public int getCount() {
      return fqs.size();
    }

    @Override
    public Object getItem(int position) {
      return fqs.get(position);
    }

    @Override
    public long getItemId(int position) {
      return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      if(convertView==null){
 convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.item_list,null);
 ItemTag itemTag=new ItemTag();
 itemTag.tv_name= (TextView) convertView.findViewById(R.id.tv_item_listview_name);
 itemTag.tv_content= (TextView) convertView.findViewById(R.id.tv_item_listview_content);
 itemTag.tv_tiem= (TextView) convertView.findViewById(R.id.tv_item_listview_time);
 convertView.setTag(itemTag);
      }
      ItemTag itemTag= (ItemTag) convertView.getTag();
      itemTag.tv_name.setText(fqs.get(position).getName());
      itemTag.tv_content.setText(fqs.get(position).getContent());
      itemTag.tv_tiem.setText(fqs.get(position).getTime());

      return convertView;
    }
  }

  public void getXML(View view) {
    new MyTask().execute();
  }

  class MyTask extends AsyncTask {
    //获取数据前
    @Override
    protected void onPreExecute() {
      super.onPreExecute();
      progressDialog.show();
    }

    @Override
    protected Object doInBackground(Object[] params) {
      //获取网络数据
      //1.定义获取网络的数据的路径
      String path = "http://192.168.43.149:8080/dataResult.xhtml";
      //2.实例化URL
      try {
 URL url = new URL(path);
 //3.获取链接对象
 HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
 //4.设置请求
 httpURLConnection.setRequestMethod("GET");
 //5.设置请求链接超时的时间
 httpURLConnection.setConnectTimeout(5000);
 //6.获取响应码
 int code = httpURLConnection.getResponseCode();
 if (code == 200) {
   //7.获取返回过来的数据(XML)
   InputStream is = httpURLConnection.getInputStream();
   //8.使用DOM解析XML文件
   documentBuilderFactory documentBuilderFactory=documentBuilderFactory.newInstance();
   documentBuilder documentBuilder=documentBuilderFactory.newdocumentBuilder();
   document document=documentBuilder.parse(is);
   //获取根标签
   Element root=document.getdocumentElement();
   NodeList nodeList = root.getElementsByTagName("fq");
   for (int i = 0; i < nodeList.getLength(); i++) {
     Element element = (Element) nodeList.item(i);
     //获取属性name
     String name = element.getAttribute("name");
     //获取子标签content,time
     Element elementContent = (Element) element.getElementsByTagName("content").item(0);
     String content = elementContent.getTextContent();
     Element elementTime = (Element) element.getElementsByTagName("time").item(0);
     String time = elementTime.getTextContent();
     FQ fq = new FQ(name, content, time);
     fqs.add(fq);
   }
 }
      } catch (Exception e) {
 e.printStackTrace();
      }
      return fqs;
    }

    //获取数据后更新UI
    @Override
    protected void onPostExecute(Object o) {
      super.onPostExecute(o);
      progressDialog.cancel();
      myadapter.notifyDataSetChanged();
    }
  }
}

PULL解析代码

public class MainPullActivity extends AppCompatActivity {

  private ListView lv_mainpull_list;
  private ProgressDialog progressDialog;
  private List fqs = new ArrayList<>();
  private MyAdapter myadapter;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_pull);
    myadapter = new MyAdapter();
    lv_mainpull_list = (ListView) findViewById(R.id.lv_mainpull_list);
    lv_mainpull_list.setAdapter(myadapter);

    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("小青正在拼命加載中.....");
  }

  class MyAdapter extends baseAdapter {

    @Override
    public int getCount() {
      return fqs.size();
    }

    @Override
    public Object getItem(int position) {
      return fqs.get(position);
    }

    @Override
    public long getItemId(int position) {
      return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      if (convertView == null) {
 convertView = LayoutInflater.from(MainPullActivity.this).inflate(R.layout.item_list, null);
 ItemTag itemTag = new ItemTag();
 itemTag.tv_name = (TextView) convertView.findViewById(R.id.tv_item_listview_name);
 itemTag.tv_content = (TextView) convertView.findViewById(R.id.tv_item_listview_content);
 itemTag.tv_tiem = (TextView) convertView.findViewById(R.id.tv_item_listview_time);
 convertView.setTag(itemTag);
      }
      ItemTag itemTag = (ItemTag) convertView.getTag();
      itemTag.tv_name.setText(fqs.get(position).getName());
      itemTag.tv_content.setText(fqs.get(position).getContent());
      itemTag.tv_tiem.setText(fqs.get(position).getTime());

      return convertView;
    }
  }

  public void getPULL(View view) {
    new MyTask().execute();
  }

  class MyTask extends AsyncTask {
    private FQ fq;

    //获取数据前
    @Override
    protected void onPreExecute() {
      super.onPreExecute();
      progressDialog.show();
    }

    @Override
    protected Object doInBackground(Object[] params) {
      //获取网络数据
      //1.定义获取网络的数据的路径
      String path = "http://192.168.43.149:8080/dataResult.xhtml";
      //2.实例化URL
      try {
 URL url = new URL(path);
 //3.获取链接对象
 HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
 //4.设置请求
 httpURLConnection.setRequestMethod("GET");
 //5.设置请求链接超时的时间
 httpURLConnection.setConnectTimeout(5000);
 //6.获取响应码
 int code = httpURLConnection.getResponseCode();
 if (code == 200) {
   //7.获取返回过来的数据(XML)
   InputStream is = httpURLConnection.getInputStream();
   //8.解析XML
   //使用PULL解析XML文件
   XmlPullParser pullParser= Xml.newPullParser();
   pullParser.setInput(is,"UTF-8");
   int type=pullParser.getEventType();
   while (type!=XmlPullParser.END_document){
     switch (type){
case XmlPullParser.START_TAG:
  //获取开始标签名字
  String startTafName=pullParser.getName();
   if("fq".equals(startTafName)){
     fq = new FQ();
     String name=pullParser.getAttributevalue(0);
     fq.setName(name);
   }else if ("content".equals(startTafName)){
     String content=pullParser.nextText();
     fq.setContent(content);
   }else if ("time".equals(startTafName)){
     String time=pullParser.nextText();
     fq.setTime(time);
   }
  break;
case XmlPullParser.END_TAG:
  //获取接受标签的名字
  String endtagname=pullParser.getName();
  if("fq".equals(endtagname)){
    fqs.add(fq);
  }
  break;
     }
     type=pullParser.next();
   }
 }
      } catch (Exception e) {
 e.printStackTrace();
      }
      return fqs;
    }

    //获取数据后更新UI
    @Override
    protected void onPostExecute(Object o) {
      super.onPostExecute(o);
      progressDialog.cancel();
      myadapter.notifyDataSetChanged();
    }
  }
}

SAX解析代码

public class MainSaxActivity extends AppCompatActivity {

  private ListView lv_mainsax_list;
  private ProgressDialog progressDialog;
  private List fqs = new ArrayList<>();
  private MyAdapter myadapter;
  private String currentTag = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_sax);
    lv_mainsax_list = (ListView) findViewById(R.id.lv_mainsax_list);
    myadapter = new MyAdapter();
    lv_mainsax_list.setAdapter(myadapter);

    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("小青正在拼命加載中.....");
  }

  class MyAdapter extends baseAdapter {

    @Override
    public int getCount() {
      return fqs.size();
    }

    @Override
    public Object getItem(int position) {
      return fqs.get(position);
    }

    @Override
    public long getItemId(int position) {
      return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      if (convertView == null) {
 convertView = LayoutInflater.from(MainSaxActivity.this).inflate(R.layout.item_list, null);
 ItemTag itemTag = new ItemTag();
 itemTag.tv_name = (TextView) convertView.findViewById(R.id.tv_item_listview_name);
 itemTag.tv_content = (TextView) convertView.findViewById(R.id.tv_item_listview_content);
 itemTag.tv_tiem = (TextView) convertView.findViewById(R.id.tv_item_listview_time);
 convertView.setTag(itemTag);
      }
      ItemTag itemTag = (ItemTag) convertView.getTag();
      itemTag.tv_name.setText(fqs.get(position).getName());
      itemTag.tv_content.setText(fqs.get(position).getContent());
      itemTag.tv_tiem.setText(fqs.get(position).getTime());

      return convertView;
    }
  }

  public void getSAX(View view) {
    new MyTask().execute();
  }

  class MyTask extends AsyncTask {

    private FQ fq;

    //获取数据前
    @Override
    protected void onPreExecute() {
      super.onPreExecute();
      progressDialog.show();
    }

    @Override
    protected Object doInBackground(Object[] params) {
      //获取网络数据
      //1.定义获取网络的数据的路径
      String path = "http://192.168.43.149:8080/dataResult.xhtml";
      //2.实例化URL
      try {
 URL url = new URL(path);
 //3.获取链接对象
 HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
 //4.设置请求
 httpURLConnection.setRequestMethod("GET");
 //5.设置请求链接超时的时间
 httpURLConnection.setConnectTimeout(5000);
 //6.获取响应码
 int code = httpURLConnection.getResponseCode();
 if (code == 200) {
   //7.获取返回过来的数据(XML)
   InputStream is = httpURLConnection.getInputStream();
   //8.解析XML
   //使用SAX解析XML文件
   SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
   SAXParser saxParser = saxParserFactory.newSAXParser();
   saxParser.parse(is, new DefaultHandler() {
     @Override
     public void startdocument() throws SAXException {
super.startdocument();
     }

     @Override
     public void enddocument() throws SAXException {
super.enddocument();
     }

     @Override
     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
currentTag = localName;
if ("fq".equals(localName)) {
  //实例化对象
  fq = new FQ();
  String name = attributes.getValue(0);
  fq.setName(name);
}
     }

     @Override
     public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
currentTag=null;
if ("fq".equals(localName)){
  fqs.add(fq);
}
     }

     @Override
     public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
if ("content".equals(currentTag)) {
  String content = new String(ch, start, length);
  fq.setContent(content);
}else if ("time".equals(currentTag)) {
  String time = new String(ch, start, length);
  fq.setTime(time);
}
     }
   });
 }
      } catch (Exception e) {
 e.printStackTrace();
      }
      return fqs;
    }

    //获取数据后更新UI
    @Override
    protected void onPostExecute(Object o) {
      super.onPostExecute(o);
      progressDialog.cancel();
      myadapter.notifyDataSetChanged();
    }
  }
}

实体类

public class FQ {
  private String name;
  private String content;
  private String time;

  public FQ(){}
  public FQ(String name, String time, String content) {
    this.name = name;
    this.time = time;
    this.content = content;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getContent() {
    return content;
  }

  public void setContent(String content) {
    this.content = content;
  }

  public String getTime() {
    return time;
  }

  public void setTime(String time) {
    this.time = time;
  }
}

public class ItemTag {
  public TextView tv_name;
  public TextView tv_content;
  public TextView tv_tiem;
}

配置文件添加联网权限


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/159617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号