歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android中使用SAX對XMl文件進行解析

在Android中的xml的文件解析,一般有三種方法 sax,dom,pull; 不過一般使用最多的是sax技術;在Java中使用SAX技術解析XML文檔 見 http://www.linuxidc.com/Linux/2012-01/51439.htm

sax解析技術是解析速度很快,並且占用很小量的內存;sax解析的方法是進行事件驅動的方法,相對於dom技術必須要調用這個xml文檔到內存中,他不需要整個xml文檔,

按順序進行解析,按要求把xml當如到內存中;當我們在解析的時候,會按照要求觸發一系列的回調方法,這些方法我們可以在ContentHandler接口中找到,不過如果實現這個接口,我們要去實現裡面所有的方法,方法比較多;不過我們可以去繼承已經實現該接口的DefaultHandler類;

本文源碼下載地址

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2012年資料/1月/13日/Android中使用SAX對XMl文件進行解析/

 

可以重寫一下一些方法:

1:  startDocument()  這是解析到文檔開始的時候,可以去做一些初始化或者預處理的事情

2:endDocument()  這是解析到文檔結束的時候,可以去做一些收尾的事情

3:startElement(StringnamespaceURI, StringlocalName, StringqName, Attributesatts) 

    這是讀到一個元素的時候,會觸發這個方法  參數意思:

namespaceURI 命名空間,如果沒有命名空間填寫"";  localName:當前解析到的元素名字; qName:命名空間+當前解析到的元素名字;atts:當前解析到元素的屬性

4:endElement(Stringuri, StringlocalName, String name)

這個方法和

startElement

方法相對應,在遇到結束標簽的時候,調用.

5:characters(char[]ch,int start,int length)   調用這個方法,取出解析到的文本內容

  

  使用步驟:(使用以下的XML文件)

<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="1">
<name>張三</name>
<age>30</age>
</student>
<student id="2">
<name>李四</name>
<age>24</age>
</student>
</students>

  1:創建繼承於DefaultHandler解析幫組類;

  2:在創建讀取方法裡面進行SAX解析:

    SAXParserFactory spf = SAXParserFactory.newInstance();
   SAXParser parser = spf.newSAXParser();
   SAXXMLHandler handler = new SAXXMLHandler();
   parser.parse(inputStream, handler);

  

下面直接看Demo代碼:

  解析幫助類:

  

[java]
  1. package com.jiangqq.sax;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.xml.sax.Attributes;  
  7. import org.xml.sax.SAXException;  
  8. import org.xml.sax.helpers.DefaultHandler;  
  9.   
  10. import com.jiangqq.bean.Person;  
  11. import com.jiangqq.bean.Student;  
  12.   
  13. public class SAXXMLHandler extends DefaultHandler {  
  14.   
  15.     private Student student;  
  16.     private List<Student> list;  
  17.     private String tag;  
  18.   
  19.     public List<Student> getList() {  
  20.         return list;  
  21.     }  
  22.   
  23.     @Override  
  24.     public void startDocument() throws SAXException {  
  25.   
  26.         super.startDocument();  
  27.         list = new ArrayList<Student>();  
  28.     }  
  29.   
  30.     @Override  
  31.     public void endDocument() throws SAXException {  
  32.         super.endDocument();  
  33.     }  
  34.   
  35.     @Override  
  36.     public void startElement(String uri, String localName, String qName,  
  37.             Attributes attributes) throws SAXException {  
  38.         super.startElement(uri, localName, qName, attributes);  
  39.         if ("student".equals(localName)) {  
  40.             student = new Student();  
  41.             student.setId(new Integer(attributes.getValue("""id")));  
  42.         }  
  43.         tag = localName;  
  44.     }  
  45.   
  46.     @Override  
  47.     public void endElement(String uri, String localName, String qName)  
  48.             throws SAXException {  
  49.         super.endElement(uri, localName, qName);  
  50.         if (student != null && localName.equals("student")) {  
  51.             list.add(student);  
  52.             student = null;  
  53.   
  54.         }  
  55.         tag = null;  
  56.     }  
  57.   
  58.     @Override  
  59.     public void characters(char[] ch, int start, int length)  
  60.             throws SAXException {  
  61.         super.characters(ch, start, length);  
  62.         if ("name".equals(tag)) {  
  63.             if (student != null) {  
  64.                 student.setName(new String(ch, start, length));  
  65.             }  
  66.         } else if ("age".equals(tag)) {  
  67.             if (student != null) {  
  68.                 student.setAge(new Short(new String(ch, start, length)));  
  69.             }  
  70.         }  
  71.     }  
  72. }  

主Activity類

  

[java]
  1. package com.jiangqq.activity;  
  2.   
  3. import java.io.InputStream;  
  4. import java.util.List;  
  5.   
  6. import javax.xml.parsers.SAXParser;  
  7. import javax.xml.parsers.SAXParserFactory;  
  8.   
  9. import com.jiangqq.bean.Person;  
  10. import com.jiangqq.bean.Student;  
  11. import com.jiangqq.sax.R;  
  12. import com.jiangqq.sax.SAXXMLHandler;  
  13.   
  14. import android.app.Activity;  
  15. import android.os.Bundle;  
  16. import android.view.View;  
  17. import android.view.View.OnClickListener;  
  18. import android.widget.Button;  
  19. import android.widget.TextView;  
  20. import android.widget.Toast;  
  21.   
  22. public class XmlMainActivity extends Activity {  
  23.     private Button saxbtn;  
  24.     private TextView tv;  
  25.     private List<Student> students;  
  26.   
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.main);  
  31.         saxbtn = (Button) findViewById(R.id.et1);  
  32.         tv = (TextView) findViewById(R.id.tv);  
  33.         saxbtn.setOnClickListener(new OnClickListener() {  
  34.   
  35.             @Override  
  36.             public void onClick(View v) {  
  37.                 InputStream inputStream = XmlMainActivity.class  
  38.                         .getClassLoader().getResourceAsStream("student.xml");  
  39.                 students = readSAXXML(inputStream);  
  40.                 String string = "使用SAX解析結果如下:" + "\n";  
  41.                 for (Student student : students) {  
  42.                     string += student.toString();  
  43.                     string += "\n";  
  44.                 }  
  45.                 tv.setText(string);  
  46.             }  
  47.         });  
  48.     }  
  49.   
  50.     public List<Student> readSAXXML(InputStream inputStream) {  
  51.         try {  
  52.   
  53.             SAXParserFactory spf = SAXParserFactory.newInstance();  
  54.             SAXParser parser = spf.newSAXParser();  
  55.             SAXXMLHandler handler = new SAXXMLHandler();  
  56.             parser.parse(inputStream, handler);  
  57.             inputStream.close();  
  58.             return handler.getList();  
  59.         } catch (Exception e) {  
  60.             Toast.makeText(this"使用SAX進行XML文件解析失敗", Toast.LENGTH_LONG).show();  
  61.         }  
  62.         return null;  
  63.     }  
  64. }  

解析效果截圖:

 

Copyright © Linux教程網 All Rights Reserved