欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程使用sax解析xml数据的方法详解

程序员文章站 2022-10-29 16:32:16
本文实例讲述了android编程使用sax解析xml数据的方法。分享给大家供大家参考,具体如下: 随着技术的发展,现在的web已经和以前不同了。web已经逐渐像移动的方向...

本文实例讲述了android编程使用sax解析xml数据的方法。分享给大家供大家参考,具体如下:

随着技术的发展,现在的web已经和以前不同了。web已经逐渐像移动的方向倾斜,作为程序员的确应该拓展一下自己的知识层面。学习各方面的知识,今天就接着前几天的弄一下android的xml解析,这次就使用sax的方式解析xml.下面就一步一步的来做吧。

1. 编写一个简单的xml

<?xml version="1.0" encoding="utf-8"?>
<persons>
 <person id="01">
   <name>will</name>
   <age>21</age>
 </person>
 <person id="02">
   <name>will2</name>
   <age>22</age>
 </person>
</persons>

2. 编写pojo类

package org.lxh.vo;
public class person {
  private string id;
  private string name;
  private int age;
  public string getname() {
    return name;
  }
  public void setname(string name) {
    this.name = name;
  }
  public string tostring() {
    return "person [id=" + id + ", name=" + name + ", age=" + age + "]";
  }
  public int getage() {
    return age;
  }
  public void setage(int age) {
    this.age = age;
  }
  public string getid() {
    return id;
  }
  public void setid(string id) {
    this.id = id;
  }
}

3.  写一个解析xml的类

package org.lxh.impl;
import java.io.inputstream;
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.lxh.vo.person;
import org.xml.sax.attributes;
import org.xml.sax.saxexception;
import org.xml.sax.helpers.defaulthandler;
import android.util.log;
public class parse {
  public list<person> findall(inputstream in) throws exception {
    saxparserfactory factory = saxparserfactory.newinstance(); //创建解析工厂
    saxparser parser = factory.newsaxparser();
    parseperson chuli = new parseperson();
    parser.parse(in, chuli);
    in.close(); //关闭输入流
    return chuli.getdata();
  }
  //开始解析xml
  public class parseperson extends defaulthandler {
    list<person> all = null;
    person person = null;
    string flag = null;
    public list<person> getdata() {
      return all;
    }
    public void startdocument() throws saxexception {
      all = new arraylist<person>(); //实例化集合
    }
    public void startelement(string uri, string localname, string qname,
        attributes attributes) throws saxexception {
      if ("person".equals(localname)) {
        person = new person();
        person.setid(attributes.getvalue(0)); //取得id的内容
      }
      flag = localname; //记录上一个element
    }
    public void characters(char[] ch, int start, int length)
        throws saxexception {
      if (flag != null) { //这样做取得的值就不会重复
        string data = new string(ch, start, length);
        if ("name".equals(flag)) {
          person.setname(data);
        }
        else if ("age".equals(flag)) {
          person.setage(integer.parseint(data));
        }
      }
    }
    public void endelement(string uri, string localname, string qname)
        throws saxexception {
      if ("person".equals(localname)) {
        all.add(person);
        person = null;
      }
      flag = null;
    }
  }
}

4. 进行单元测试

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="org.lxh.activity"
   android:versioncode="1"
   android:versionname="1.0">
  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <uses-library android:name="android.test.runner"/>
    <activity android:name=".saxparsexmlactivity"
         android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.main" />
        <category android:name="android.intent.category.launcher" />
      </intent-filter>
    </activity>
  </application>
  <instrumentation android:name="android.test.instrumentationtestrunner"
  android:targetpackage="org.lxh.activity" android:label="testformyapp"/>
  <uses-sdk android:minsdkversion="8" />
</manifest>

package org.lxh.activity;
import java.io.inputstream;
import java.util.iterator;
import java.util.list;
import org.lxh.impl.parse;
import org.lxh.vo.person;
import android.test.androidtestcase;
import android.util.log;
public class test extends androidtestcase{
  public static final string tag="test";
 public void testshuchu() throws throwable{
   //log.i(tag, "123");
   parse p=new parse();
   inputstream in=getclass().getclassloader().getresourceasstream("persons.xml");
    list<person> all=p.findall(in);
     log.i(tag, string.valueof(all.size()));
    iterator<person> it=all.iterator();
    while(it.hasnext()){
      person person=it.next();
      log.i(tag, person.tostring());
    }
 }
}

最后来看一下运行效果图,这里最好弄个filter,控制台就没那么乱了。

Android编程使用sax解析xml数据的方法详解

点击那个绿色的加号就ok了

Android编程使用sax解析xml数据的方法详解

ps:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线xml/json互相转换工具:

在线格式化xml/在线压缩xml

xml在线压缩/格式化工具:

xml代码在线格式化美化工具:

更多关于android相关内容感兴趣的读者可查看本站专题:《android操作xml数据技巧总结》、《android编程之activity操作技巧总结》、《android资源操作技巧汇总》、《android文件操作技巧汇总》、《android开发入门与进阶教程》、《android视图view技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。