当前位置:编程学习 > XML/UML >>

Android SAX解析xml文件

andorid读取xml文件内容方法有三种 sax dom pull,其中 pull是android自带的
1.先认识一下xml文件中的些术语
Xml代码 
<?xml version="1.0" encoding="UTF-8"?>    
<persons>    
    <person id="23">    
        <name>李明</name>    
        <age>23</age>    
    </person>    
    <person id="22">    
        <name>李量</name>    
        <age>25</age>    
    </person>    
</persons>   


xml中的标签和内容都可以叫做节点,其中的persons  person  name age 这些都叫做元素(element).而像李明 25 这些值叫做文本节点.那么有个问题 中<persons>到<person>之间的是什么,什么都没有? 答案是他也是节点,是文本节点,你会说他里面什么都没有啊,错了,它有回车和空格.这个在sax解析xml中你debug一下就会发现.回车和空格(或者是tab)是会被读取出来的.id是属性.
2.sax
sax是采用事件驱动,就是说他不需要完全读完xml文件,他是读到一个节点就解析一个节点是否符合xml语法,如果符合就调用相对应的方法其实就是回调方法,并且没有记忆功能.下面提到的这些方法都是在ContentHander()接口中的方法.
    startDocumnet() :当开始解析xml文件的声明的时候就会触发这个事件, 可以做一些初始化的工作
    startElement()   当开始解析元素的开始标签的时候,就会触发这个事件
    characters()     当读到文本元素的时候要触发这个事件.
    endElement()     当读到结束标签的时候 就会触发这个事件

    sax就是这样按照顺序来解析的.
3.sax读取xml文件举例
3-1创建一个项目 ReadXml
3-2将xml文件拷贝到根目录下.
Xml代码 
<?xml version="1.0" encoding="UTF-8"?>    
<persons>    
    <person id="23">    
        <name>李明</name>    
        <age>23</age>    
    </person>    
    <person id="22">    
        <name>李量</name>    
        <age>25</age>    
    </person>    
</persons>  

可以看出这个xml文件中有一个可以抽象出来的对象 就是person 属性有id name age
那么我们就建立一个bean
3-3:创建bean
Java代码 
package com.leequer.service.demo;    
/**  
 * <person id="23">  
        <name>李明</name>  
        <age>23</age>  
    </person>  
    <person id="22">  
        <name>李量</name>  
        <age>25</age>  
    </person>  
 * @author leequer  
 *   
 * xml文件对应的bean  
 */   
public class Person {    
        
    private Integer id;    
    private String name;    
    private int age;    
        
    public Person ()    
    {}    
    public Person (String name ,int age)    
    {    
        this.name = name;    
        this.age = age;    
    }    
    public Integer getId() {    
        return id;    
    }    
    public void setId(Integer 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;    
    }    
    @Override   
    public String toString() {    
        // TODO Auto-generated method stub    
        return this.id+",name  "+this.name+"  age  "+this.age+"\n";    
    }    
        
}   


3-4:遵循mvc的架构,我们建立一个service用来读取xml
Java代码 
package com.leequer.service;    
   
import java.io.InputStream;    
import java.util.List;    
   
   
import javax.xml.parsers.SAXParser;    
import javax.xml.parsers.SAXParserFactory;    
   
import org.xml.sax.XMLReader;    
   
   
   
import com.leequer.service.demo.Person;    
   
public class SaxReadxml {    
    public static  List<Person> readXml(InputStream inStream)throws Exception {    
        SAXParserFactory spf = SAXParserFactory.newInstance(); // 初始化sax解析器    
        SAXParser sp = spf.newSAXParser(); /

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,