首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

[Android范例] 让人人都懂XML解析,Pull方式解析Xml的详尽注释

2012-09-12 
[Android实例] 让人人都懂XML解析,Pull方式解析Xml的详尽注释解析Xml有三种方式可选,sax ,dom ,pull??,,各

[Android实例] 让人人都懂XML解析,Pull方式解析Xml的详尽注释



解析Xml有三种方式可选,sax ,dom ,pull??,,各有各的优点,但在android上是不推荐使用DOM来解析的

一般都用SAX和PULL 这两个性能相近, SAX的解析方式大家可以去看MARS的教程 讲的也比较好喔

PULL的话我个人觉得处理事件比较简单,所以就给不懂的同学详细讲讲,嘿嘿....希望大家都能明白

感谢 传智的张老师,黎老师, 感谢勇军哥
首先给大家看看我的笔记

那么我们就开始吧
很简单,这是我们要解析的xml文件,直接放在src之下

<students>
<student id = "1">
<name>伍业雄</name>
<age>22</age>
</student>
<student id = "2">
<name>陈俊安</name>
<age>21</age>
</student>
<student id = "3">
<name>王世铭</name>
<age>22</age>
</student>

</students>复制代码



写个bean??嘿嘿.<我都没学java web??原来这东西叫Bean>


    package tree.love.bean;
    import java.io.Serializable;
    public class Person implements Serializable{
    private int id ;
    private String name ;
    private int age ;
    public int getId() {
    ??return id;
    }
    public void setId(int id) {
    ??this.id = id;
    }
    public String getName() {
    ??return name;
    }
    public void setName(String name) {
    ??this.name = name;
    }
    public int getAge() {
    ??return age;
    }
    public void setAge(int age) {
    ??this.age = age;
    }
    public Person(){}
    public Person(String name ,int age )
    {
    ??this.name = name ;
    ??this.age = age ;
    }
    @Override
    public String toString() {
    ??
    ??return this.name +",,"+this.age;
    }

    }
复制代码



然后这就是解析xml的代码了.返回一个List<T>


    package tree.love.xmlUitl;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    import org.xmlpull.v1.XmlPullParser;
    import org.xmlpull.v1.XmlPullParserException;
    import tree.love.bean.Person;
    import android.util.Log;
    import android.util.Xml;
    public class MyPullxml {

    private static final String XMLPULL_INFO = "XmlPull_Info";
    public static List<Person> getDate(InputStream inStream)
    {
    ??List<Person> persons = null ;
    ??Person currentPerson = null ;
    ??
    ??/**
    ? ?* android给我们提供了一个工具类'Xml'
    ? ?* 通过这个工具类可以很方便地去new一个Pull的解析器,返回类型是XmlPullParser
    ? ?*
    ? ?**/
    ??XmlPullParser xmlPull = Xml.newPullParser();
    ??
    ??try {
    ? ?/**
    ? ? * 提供的xml内容方式都是以输入流的方式InputStream
    ? ? **/
    ? ?xmlPull.setInput(inStream,"UTF-8");
    ? ?/**
    ? ? * 触发事件getEventType() =>返回事件码
    ? ? * 当它遇到某个字符,如果符合xml的语法规范.
    ? ? * 它就会出发这个语法所代表的数字
    ? ? * Returns the type of the current event (START_TAG, END_TAG, TEXT, etc.)
    ? ? **/
    ? ?int eventCode = xmlPull.getEventType();
    ? ?
    ? ?/**
    ? ? * 解析事件:
    ? ? * StartDocument,文档开始
    ? ? * Enddocument,文档结束
    ? ? *
    ? ? *??每次读到一个字符,就产生一个事件
    ? ? *??只要解析xml文档事件不为空,就一直往下读
    ? ? **/
    ? ?while (eventCode != XmlPullParser.END_DOCUMENT)
    ? ?{
    ? ? switch (eventCode)
    ? ? {
    ? ?
    ? ? case XmlPullParser.START_DOCUMENT: //文档开始事件,可以做一些数据初始化处理
    ? ???persons = new ArrayList<Person>();
    ? ???break;
    ? ???
    ? ? case XmlPullParser.START_TAG://元素开始.
    ? ???String name = xmlPull.getName();
    ? ???if(name.equalsIgnoreCase("student"))
    ? ???{
    ? ?? ?currentPerson = new Person();
    ? ?? ?currentPerson.setId(new Integer(xmlPull.getAttributeValue(null, "id")));
    ? ???}
    ? ???else if(currentPerson != null)
    ? ???{
    ? ?? ?if(name.equalsIgnoreCase("name"))
    ? ?? ?{
    ? ?? ? currentPerson.setName(xmlPull.nextText());
    ? ?? ?}
    ? ?? ?else if(name.equalsIgnoreCase("age"))
    ? ?? ?{
    ? ?? ? currentPerson.setAge(new Short(xmlPull.nextText()));
    ? ?? ?}
    ? ???}
    ? ???break;
    ? ? case XmlPullParser.END_TAG: //元素结束,

    ? ???if(currentPerson != null && xmlPull.getName().equalsIgnoreCase("student"))
    ? ???{
    ? ?? ?persons.add(currentPerson);
    ? ?? ?currentPerson = null ;
    ? ???}
    ? ???break;
    ? ? }
    ? ? eventCode = xmlPull.next();//进入到一下一个元素.
    ? ?}
    ??} catch (XmlPullParserException e) {
    ? ?
    ? ?Log.i(XMLPULL_INFO, e.toString());
    ??} catch (IOException e) {
    ? ?
    ? ?Log.i(XMLPULL_INFO, e.toString());
    ??}
    ??return persons;
    }
    }
复制代码



最后xml的数据这东西 写好之后最好能用Android Junit 一下.再与之数据交互 ,放进listView 或者Gridview

    package tree.love.action;

    import java.io.InputStream;
    import java.util.List;

    import tree.love.bean.Person;
    import tree.love.xmlUitl.MyPullxml;
    import android.test.AndroidTestCase;
    import android.util.Log;

    public class xmlText extends AndroidTestCase {
    public void PullXmlText() throws Exception
    {
    InputStream instream = this.getClass().getClassLoader().getResourceAsStream("student.xml");

    List<Person> persons = MyPullxml.getDate(instream);

    for(Person person : persons)
    {
    Log.i("XML", person.toString());
    }
    }
    }
复制代码

热点排行