Android App中使用Pull解析XML格式数据的使用示例

Pull解析XML文件的方式与SAX解析XML文件的方式大致相同,他们都是基于事件驱动的。所以,利用pull解析XML文件需要下面几个步骤:

1)通过XMLPullParserFactory获取XMLPullParser对象。

2)通过XMLPullParser对象设置输入流。

3)通过parser.next(),持续的解析XML文件直到文件的尾部。

下面的几个方法是经常需要的:XMLPullParserFacotry.newInstance( )    facotry.newPullParser( )   parser.setInput( )       parser.next( ).

下面通过一个例子描述上面的几个步骤:

//1.第一步,创建解析工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//设置支持命名空间
factory.setNamespaceAware(true);
//2.生成parser对象
XmlPullParser parser = factory.newPullParser();
//3.设置输入
parser.setInput(new StringReader("<?xml version=\"1.0\" ?><poem><title>静夜思</title><author>李白</author><content>床前明月光,疑似地上霜,举头忘明月,低头思故乡</content></poem>"));
//获取输入类型
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT)
 {
   if (eventType == XmlPullParser.START_DOCUMENT) {
  Log.d("tag", "----"+parser.getName());
  }
   if (eventType == XmlPullParser.START_TAG) {
  Log.d("tag", "----"+parser.getName());
  }
   if (eventType == XmlPullParser.TEXT) {
  Log.d("tag", "----"+parser.getText());
  }
   if (eventType == XmlPullParser.END_TAG) {
  Log.d("tag", "----"+parser.getName());
  }
  //不断的去更新
  eventType = parser.next();
 }

打印出的对象:

pull在android 集成了这种解析,性能和sax差不多,个人认为用来来比sax解析容易多了;采用事件驱动进行解析。
dom(Document Object Model)文档对象模型:是W3C组织推荐的解析XML的一种方式;一般只能只能解析比较小的XML文件;因为dom解析是把整个XML放入内存,占用内存比较大,但对文档的
增删改查标胶容易操作。
sax(Simple API for XML)不是官方的标准,但它是XML社区事实上的标准,几乎所有的XML解析器都支持它。sax解析一般适合xml的读取,sax解析是从上往下读取,一行一行来读。

来看一个完整的实例:

package com.android.xiong.documentpullxml; 

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.LinkedHashMap; 

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory; 

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; 

public class MainActivity extends Activity { 

  TextView showtxt;
  Button btshow; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    showtxt = (TextView) findViewById(R.id.showtxt);
    btshow = (Button) findViewById(R.id.showxml);
    btshow.setOnClickListener(new OnClickListener() { 

      @Override
      public void onClick(View v) {
        GetBaiduXmlBooks baiduxml=new GetBaiduXmlBooks();
        baiduxml.execute("http://bcs.duapp.com/meinvlook/books.xml");
      }
    });
  } 

  // 异步任务
  class GetBaiduXmlBooks extends
      AsyncTask<String, Integer, LinkedHashMap<String, String>> { 

    ProgressDialog progress; 

    // 初始化ProgressDialog
    @Override
    protected void onPreExecute() {
      progress = new ProgressDialog(MainActivity.this);
      progress.setTitle("提示!");
      progress.setMessage("正在解析百度云存储的XML");
      progress.setCanceledOnTouchOutside(false);
      progress.setButton(ProgressDialog.BUTTON_NEUTRAL, "取消",
          new DialogInterface.OnClickListener() { 

            @Override
            public void onClick(DialogInterface dialog, int which) {
              // 取消任务
              GetBaiduXmlBooks.this.cancel(true);
              progress.dismiss();
            }
          });
      progress.show();
    } 

    // 进行耗时操作
    @Override
    protected LinkedHashMap<String, String> doInBackground(String... params) {
      String xmurl = params[0];
      LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
      URL url;
      try {
        url = new URL(xmurl);
        HttpURLConnection connection = (HttpURLConnection) url
            .openConnection();
        connection.setConnectTimeout(10000);
        connection.setRequestMethod("GET");
        InputStream instream = connection.getInputStream();
        // 获取xml解析器
        XmlPullParser parser = XmlPullParserFactory.newInstance()
            .newPullParser();
        parser.setInput(instream, "UTF-8");
        int type=parser.getEventType();
        //开始解析xml文件
        while (type!= XmlPullParser.END_DOCUMENT) {
          if (type == XmlPullParser.START_TAG) {
            // 获取开始标签
            if (parser.getName().equals("书名")) {
              //获取节点的值
              map.put("书名", parser.nextText());
            }
            if (parser.getName().equals("价格")) {
              map.put("价格", parser.nextText());
            }
            if (parser.getName().equals("作者")) {
              map.put("作者", parser.nextText());
            }
            if (parser.getName().equals("性别")) {
              map.put("性别", parser.nextText());
            }
            if (parser.getName().equals("年龄")) {
              map.put("年龄",parser.nextText());
            }
          }
          type=parser.next();
        }
      } catch (IOException e) {
        e.printStackTrace();
      } catch (XmlPullParserException e) {
        e.printStackTrace();
      }
      return map;
    } 

    @Override
    protected void onPostExecute(LinkedHashMap<String, String> result) { 

      for (String txt : result.keySet()) {
        showtxt.append(txt+":"+result.get(txt)+"\n");
      }
      progress.dismiss(); 

    } 

  } 

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  } 

}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context=".MainActivity" > 

  <Button
    android:id="@+id/showxml"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/btshowxml"/> 

  <TextView
    android:id="@+id/showtxt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" /> 

</LinearLayout> 

<!-- 获取网络权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
(0)

相关推荐

  • Android基于Pull方式解析xml的方法详解

    本文实例讲述了Android基于Pull方式解析xml的方法.分享给大家供大家参考,具体如下: Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull. Pull解析和Sax解析不一样的地方有: (1)pull读取xml文件后触发相应的事件调用方法返回的是数字 (2)pull可以在程序中控制想解析到哪里就可以停止解析. 来看看实例: book.xml如下: <?xml version="1.0"

  • Android 使用Pull方法解析XML文件的方法

    Pull解析方法给应用程序完全的控制文档该怎么样被解析.Android中对Pull方法提供了支持的API,主要是 复制代码 代码如下: org.xmlpull.v1.XmlPullParser;org.xmlpull.v1.XmlPullParserFactory; 二个类,其中主要使用的是XmlPullParser,XmlPullParserFactory是一个工厂,用于构建XmlPullParser对象.应用程序通过调用XmlPullParser.next()等方法来产生Event,然后再处

  • Android解析XML的三种方式SAX、Pull、Dom

    在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),本文对android解析xml的这三种方式进行一次总结. 今天解析的xml示例(channels.xml)如下: <?xml version="1.0" encoding="utf-8"?> <channel> <item id=&quo

  • Android编程解析XML方法详解(SAX,DOM与PULL)

    本文实例讲述了Android编程解析XML方法.分享给大家供大家参考,具体如下: XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法. 在Android中,常见的XML解析器分别为SAX解析器.DOM解析器和PULL解析器,下面,我将一一向大家详细介绍. SAX解析器: SAX(Simple API for XML)解析器是一种基于事

  • 实例解析Android中使用Pull解析器解析XML的方法

    1.Pull简介 Pull解析器是Android系统内置的的,Pull解析器与SAX解析器类似,他提供了类似的事件,如开始元素和介绍元素的事件,使用parser.next()可以进入下一个元素并触发相应的事件,然后进行相应的处理,当元素开始解析时,调用perser.nextText()方法就可以获取到下一个Text类型元素的值. 2.pull特点 (1)简单的结构,一个接口,一个另外,一个工厂组成了Pull解析器 (2)简单易用,Pull解析器只有一个重要的方法next(),他被用来检索下一个事

  • android4.0混淆XmlPullParser报错原因分析解决

    复制代码 代码如下: [2013-05-20 17:30:52 - danielinbiti] Proguard returned with error code 1. See console [2013-05-20 17:30:52 - danielinbiti] Note: there were 67 duplicate class definitions. [2013-05-20 17:30:52 - danielinbiti] Warning: library class android

  • Android平台基于Pull方式对XML文件解析与写入方法详解

    本文详细讲述了Android平台基于Pull方式对XML文件解析与写入方法.分享给大家供大家参考,具体如下: XML技术在跨平台的情况下的数据交互中得到了广泛的应用,假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通过XML文件可以很方便的在Android平台和服务器之间进行数据传输,具体实现涉及到对XML文件进行解析及写入的技术.本文实现在Android平台上基于Pull方式对XML文件解析的技术. XmlPullParser是一个Java实现的开源API包(源码下载地

  • Android使用Pull解析器解析xml文件的实现代码

    2个类:1个实体类Person.java,1个继承Activity的类 1.Person.java 复制代码 代码如下: package com.mrzhu.work_1_sax; public class Person { private String personId; private String name; private String address; private String tel; private String fax; private String email; publi

  • Android中使用PULL方式解析XML文件深入介绍

    一.基本介绍 Android中极力推荐xmlpull方式解析xml. xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自己获取xmlpull所依赖的类库,kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar. jar包下载网址 http://www.xmlpull.org/ http://kxml.sourceforge.net/ 二.例子 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 E

  • Android中使用pull解析器操作xml文件的解决办法

    一.使用Pull解析器读取XML文件 除了可以使用SAX或DOM解析XML文件之外,大家也可以使用Android内置的Pull解析器解析XML文件. Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE.如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件.android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的. Pull解析器的运行方式与SAX 解析器相似.

随机推荐