天天看點

Android安卓使用SAX方式解析xml

Android安卓使用SAX方式解析xml

  1. 修改activity_main.xml中代碼,添加button控件,實作點選解析
Android安卓使用SAX方式解析xml

<Button

    android:id="@+id/parser"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:text="解析"/>

2.建立MyHandler類繼承DefaultHandler

Android安卓使用SAX方式解析xml
Android安卓使用SAX方式解析xml

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;

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類中代碼

Android安卓使用SAX方式解析xml

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.運作檢視解析列印結果

  1. Android安卓使用SAX方式解析xml