当前位置: 移动技术网 > 移动技术>移动开发>Android > Android编程使用sax解析xml数据的方法详解

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

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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,控制台就没那么乱了。

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

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

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

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

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

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

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网