Android學習筆記之XML解析(SAX)

fmms 12年前發布 | 17K 次閱讀 Android Android開發 移動開發

SAX是一種占用內存少且解析速度快的解析器,它采用的是事件啟動,它不需要解析完整個文檔,而是按照內容順序 看文檔某個部分是否符合xml語法,如果符合就觸發相應的事件,所謂的事件就是些回調方法(callback),這些方法 定義在ContentHandler中,下面是其主要方法:


startDocument:當遇到文檔的時候就觸發這個事件 調用這個方法 可以在其中做些預處理工作

startElement: (String namespaceURI,String localName,String qName,Attributes atts)當遇開始標簽的時候就會觸發這個方法。

endElement(String uri,String localName,String name):當遇到結束標簽時觸發這個事件,調用此法可以做些善后工作。

charachers(char [] ch,int start,int length):當遇到xml內容時觸發這個方法,用new String(ch,start,length)可以接受內容。
MyContentHandler.java
package mars.xml;

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;

public void startDocument() throws SAXException {
    System.out.println("````````begin````````");
}

public void endDocument() throws SAXException {
    System.out.println("````````end````````");
}

public void startElement(String namespaceURI, String localName,
        String qName, Attributes attr) throws SAXException {
    tagName = localName;
    if (localName.equals("worker")) {
        //獲取標簽的全部屬性
        for (int i = 0; i < attr.getLength(); i++) {
            System.out.println(attr.getLocalName(i) + "=" + attr.getValue(i));
        }
    }
}

public void endElement(String namespaceURI, String localName, String qName)
        throws SAXException {
    //在workr標簽解析完之后,會打印出所有得到的數據
    tagName = "";
    if (localName.equals("worker")) {
        this.printout();
    }
}
public void characters(char[] ch, int start, int length)
        throws SAXException {
    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.print("name: ");
    System.out.println(hisname);
    System.out.print("sex: ");
    System.out.println(sex);
    System.out.print("status: ");
    System.out.println(status);
    System.out.print("address: ");
    System.out.println(address);
    System.out.print("money: ");
    System.out.println(money);
    System.out.println();
}

}</pre>XMLActitity.java

package mars.xml;

import java.io.StringReader;

import javax.xml.parsers.SAXParserFactory;

import mars.utils.HttpDownloader;

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

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

public class XMLActitity extends Activity { /* Called when the activity is first created. / private Button parseButton ; @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{

    public void onClick(View v) {
        HttpDownloader hd = new HttpDownloader();
        String resultStr = hd.download("http://192.168.1.107:8081/voa1500/test.xml");
        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 e){
            e.printStackTrace();
        }
    }

}

}</pre>來自: http://blog.csdn.net/sjf0115/article/details/7222591 </div>

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!