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

Android[中级教程]第六章 XML解析之SAX解析器

 

接上一章,这一章我们就来学习SAX解析器,其实SAX跟PULL解析器差不多,事实上学会和掌握一种XML解析器对于完成项目来说已经足够了,当然,多学一点也不是什么坏事,你说呢?呵呵,加油哦!我们还是以唐僧师徙的数据为例

 

 

<?xml version="1.0" encoding="UTF-8"?>   

<persons>   

    <person id = "1">   

        <status>大徙弟</status>   

        <name>孙悟空</name>   

        <tool>金箍棒</tool>   

        <number>杀死了50只妖怪</number>   

    </person>   

       

    <person id = "2">   

        <status>二徙弟</status>   

        <name>猪八戒</name>   

        <tool>九齿钉耙</tool>   

        <number>杀死了40只妖怪</number>   

    </person>   

       

    <person id = "3">   

        <status>三徙弟</status>   

        <name>沙和尚</name>   

        <tool>降妖宝杖</tool>   

        <number>杀死了30只妖怪</number>   

    </person>   

   

</persons>   

 

 

xml文件跟上一章的一样,如果不清楚的话可以参考一下上一章

 

Android[中级教程]第五章XML解析之PULL解析器

这里我就主要放上SAXHandler的源码了

 

 

import java.util.ArrayList; 

import java.util.List; 

 

import org.xml.sax.Attributes; 

import org.xml.sax.SAXException; 

import org.xml.sax.helpers.DefaultHandler; 

 

public class SaxHandler extends DefaultHandler 

    private List<Person> persons; 

    private Person person; 

    private String tagName;//作用是记录解析时的上一个节点名称  

     

     

    public List<Person> getPersons(){ 

         

        return persons; 

    }  www.zzzyk.com

      

    /**

     * 节点处理

     */ 

    @Override 

    public void characters(char[] ch, int start, int length) 

            throws SAXException 

    { 

        String data = new String(ch, start, length); 

        if("status".equals(tagName)){ 

            person.setStatus(data); 

        } 

        if("name".equals(tagName)){ 

            person.setName(data); 

        } 

        if("tool".equals(tagName)){ 

            person.setTool(data); 

        } 

        if("number".equals(tagName)){ 

            person.setNumber(data); 

        } 

    } 

 

     

    /**

     * 元素结束

     */ 

    @Override 

    public void endElement(String uri, String localName, String qName) 

            throws SAXException 

    { 

        if("person".equals(localName)){ 

            persons.add(person); 

            person = null; 

        } 

        tagName = null; 

         

    } 

     

    /**

     * 文档开始

     */ 

    @Override 

    public void startDocument() throws SAXException 

    { 

        persons = new ArrayList<Person>(); 

    } 

     

    /**

     * 元素开始

     */ 

    @Override 

    public void startElement(String uri, String localName, String qName, 

            Attributes attributes) throws SAXException 

    { 

        if("person".equals(localName)){ 

            person = new Person(); 

            person.setId(attributes.getValue("id")); 

        } 

        tagName = localName;//将正在解析的节点名称赋给tagName  

    } 

     

接着就是Activity中的源码:

 

 

import java.io.File; 

import java.io.FileInputStream; 

import java.util.ArrayList; 

import java.util.HashMap; 

import java.util.List; 

import java.util.Map; 

 

import javax.xml.parsers.SAXParser; 

import javax.xml.parsers.SAXParserFactory; 

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