XML之sax解析

本文详细介绍了SAX解析XML的方法及其实现过程。通过事件驱动模式,SAX将XML文档转换为一系列事件进行处理。文章提供了具体的代码示例,包括创建解析器、处理文档开始与结束、元素开始与结束等关键事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
xml一共有三种解析放方法
①DOM解析
②SAX解析
③Android内置的Pull解析
*/
//第一种
②SAX解析
SAX解析XML文档采用事件驱动模式。什么是事件驱动模式?
它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理。

//新建一个工厂类SAXParserFactory
            SAXParserFactory factory = SAXParserFactory.newInstance();
            //让工厂类产生一个SAX的解析类SAXParser
            SAXParser newSAXParser = factory.newSAXParser();
            //实例化SaxHandlerBase
            SaxHandlerBase saxHandlerBase = new SaxHandlerBase();
            //调用解析类方法
            newSAXParser.parse(getAssets().open("languages.xml"),saxHandlerBase);

        List<Books> list = saxHandlerBase.getList();
            for (Books books : list) {
                Log.i(tag,books.toString());
            }
            listView.setAdapter(new ArrayAdapter<Books>(this,android.R.layout.simple_dropdown_item_1line, list));

//写一个类继承SaxHandlerBase extends DefaultHandler
/*
里面重写五个方法 注意集合数据建立一个集合的get方法方便调用

*/

@Override
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.startDocument();
        list=new ArrayList<Books>();
        Log.i(tag,"*************开始解析文档**************");
    }
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        super.startElement(uri, localName, qName, attributes);
        name=qName;
        Log.i(tag,"*************开始解析--元素**************");
        if (qName.equals("item")) {

            books=new Books();
            books.setId(attributes.getValue("id"));
        }

    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        super.characters(ch, start, length);
        String string = new String(ch, start, length);
        if (!string.trim().equals("")) {
            Log.i(tag,"*************开始解析--元素name"+name+"****"+"string="+string+"**********");
        } 

        if (name.equals("name")&&!string.trim().equals("")) {
            books.setName(string);
        } else if (name.equals("ide")&&!string.trim().equals("")) {
            books.setAuthor(string);
        }

    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        // TODO Auto-generated method stub
        super.endElement(uri, localName, qName);

        if (qName.equals("item")) {
            list.add(books);

        }
        Log.i(tag,"*************结束解析--元素**************");
    }



    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument();
        Log.i(tag,"*************结束解析文档**************");

    }

    public List<Books> getList() {
        return list;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值