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,控制台就没那么乱了。
点击那个绿色的加号就ok了
ps:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线xml/json互相转换工具:
在线格式化xml/在线压缩xml:
xml在线压缩/格式化工具:
xml代码在线格式化美化工具:
更多关于android相关内容感兴趣的读者可查看本站专题:《android操作xml数据技巧总结》、《android编程之activity操作技巧总结》、《android资源操作技巧汇总》、《android文件操作技巧汇总》、《android开发入门与进阶教程》、《android视图view技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。