Android中使用SAX解析XML

来源:互联网 发布:没有系统的嵌入式编程 编辑:程序博客网 时间:2024/04/30 19:16

1,解析XML的类

 


MyContentHandler.java

 

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyContentHandler extends DefaultHandler {

    // 定义变量
    String hisname, address, money, sex, status;
    String tagName;
    boolean flag;

    // startDocument:开始解析文件时,触发该方法
    @Override
    public void startDocument() throws SAXException {
        System.out.println("--------start----------");
    }

    // endDocument:结束解析文档时,触发该方法
    @Override
    public void endDocument() throws SAXException {
        System.out.println("--------end----------");
    }

    // startElement:读开始标签时,触发该方法
    // 参数说明:
    // 1、String uri:得到正在解析的XML文档的命名空间
    // 2、String localName:得到不包含前缀的标签的名字
    // 3、String qName:得到包含前缀的标签的名字
    // 4、Attributes attributes:得到标签的属性
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // 将得到的标签的名字赋值给tagName
        tagName = localName;
        flag = true;
        // 如果标签的名字是“worker”,则打印标签的全部属性
        if (localName.equals("worker")) {
            // 循环打印标签的全部属性
            for (int i = 0; i < attributes.getLength(); i++) {
                System.out.println(attributes.getLocalName(i) + "="
                        + attributes.getValue(i));
            }

        }

    }

    // endElement:读结束标签时,触发该方法
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        flag = false;
        // 在worker标签解析完毕的时候,打印出得到的所有数据   
        if(localName.equals("worker"))
        {
            this.printout();
        }
       
    }

    // characters:得到标签内容时,触发该方法
    // 参数说明:
    // 1、char[] ch:读取到的标签内容
    // 2、int start:读取的内容从ch数组的哪一位开始
    // 3、int length:内容的长度
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {

            if(flag == true)
            {
                if (tagName.equals("name")) {
                    hisname = new String(ch,start,length);
                } else if (tagName.equals("sex")) {
                    sex = new String(ch, start, length);
                } else if (tagName.equals("status")) {
                    status = new String(ch, start, length);
                } else if (tagName.equals("address")) {
                    address = new String(ch, start, length);
                } else if (tagName.equals("money")) {
                    money = new String(ch, start, length);
                }
            }
       

    }

    private void printout() {
        System.out.println("name:" + hisname);
        System.out.println("sex:" + sex);
        System.out.println("status:" + status);
        System.out.println("address:" + address);
        System.out.println("money:" + money);
    }

}

 

2,测试Activity类

 

XMLActivity.java

 

package yyl.xml;

import java.io.StringReader;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import yyl.utils.HttpDownloader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class XMLActivity extends Activity {
   
    private Button parseButton=null;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        parseButton = (Button)findViewById(R.id.parseButton);
        parseButton.setOnClickListener(new ParseButtonListener());
    }
   
    class ParseButtonListener implements OnClickListener
    {
        @Override
        public void onClick(View v) {
            HttpDownloader hd = new HttpDownloader();
            String resultStr = hd.download();           
            System.out.println(resultStr);
           
            try
            {
                //创建一个SAXParserFactory
                SAXParserFactory factory = SAXParserFactory.newInstance();
                XMLReader reader = factory.newSAXParser().getXMLReader();
                //为XMLReader设置内容处理器
                reader.setContentHandler(new MyContentHandler());
                //开始解析文件
                reader.parse(new InputSource(new StringReader(resultStr)));
               
            }catch(Exception ex)
            {
                ex.printStackTrace();
            }
           
           
        }      
    }
}