Android安卓使用SAX方式解析xml

Android安卓使用SAX方式解析xml

  1. 修改activity_main.xml中代码,添加button控件,实现点击解析

  

 

 

<Button
    android:id="@+id/parser"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="解析"/>

2.新建MyHandler类继承DefaultHandler

 

 

3.修改MyHandler类下的代码

package com.example.saxparserxml;

import android.util.Log;

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

/**
 * Created by 龙先生 on 2020/10/28.
 */

public class MyHandler  extends DefaultHandler{
    private String nodeName;
    private StringBuilder id;
    private StringBuilder name;
    private StringBuilder Version;

    @Override
    public void startDocument() throws SAXException {
        Log.d("111","444");
        id=new StringBuilder();
        name=new StringBuilder();
        Version=new StringBuilder();
    }
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        //开始某个节点的时候调用
        nodeName=localName;
        Log.d("111",localName);
    }


    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {

        //获取节点中内容的时候调用
        if("id".equals(nodeName)){
            id.append(ch,start,length);
        }else if("name".equals(nodeName)){
            name.append(ch,start,length);
        }else if ("version".equals(nodeName)){
            Version.append(ch,start,length);
        }
    }


    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        //解析完某个节点的时候调用
        //证明走到了完整的大节点


        if ("app".equals(localName)){
            Log.d("app",id.toString().trim());
            Log.d("app",name.toString().trim());
            Log.d("app",Version.toString().trim());
            id.setLength(0);
            name.setLength(0);
            Version.setLength(0);
        }


    }

    @Override
    public void endDocument() throws SAXException {
        //整个xml解析完成后调用
        super.endDocument();
    }


}

4.修改MainActivity类中代码

 

package com.example.saxparserxml;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

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

import java.io.StringReader;

import javax.xml.parsers.SAXParserFactory;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button1=(Button) findViewById(R.id.parser);
        button1.setOnClickListener(this);



    }

    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.parser){
            parser();
        }

    }
    private void parser(){
        try {
            SAXParserFactory factory=SAXParserFactory.newInstance();
            XMLReader xmlReader=factory.newSAXParser().getXMLReader();
            MyHandler handler=new MyHandler();
            //将handler设置到XMlreader中
            xmlReader.setContentHandler(handler);
            //开始进行解析
            xmlReader.parse(new InputSource(new StringReader("<apps><app><id>1</id><name>小明</name><version>1.0</version></app></apps>")));

        }catch (Exception e){
               e.printStackTrace();
        }
    }
}

5.运行查看解析打印结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值