加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Android Sax技巧读取xml文件

发布时间:2021-12-18 16:20:41 所属栏目:PHP教程 来源:互联网
导读:SAX(Simple API for XML)提供了一种基于事件的处理思路,不需要装载、遍历整个XML文件,只要发现你所关心的标签或数据,就可以随时停止解析。 1. xml读取代码,继承DefaultHandler(内含解析XML文档中产生的各种类型的事件的空实现,只需重写用到的事件即

SAX(Simple API for XML)提供了一种基于事件的处理思路,不需要装载、遍历整个XML文件,只要发现你所关心的标签或数据,就可以随时停止解析。
 
1. xml读取代码,继承DefaultHandler(内含解析XML文档中产生的各种类型的事件的空实现,只需重写用到的事件即可)。
事件处理的顺序:一般在 startDocument() 初始化工作,在 endDocument() 中收尾的处理工作;startElement() - characters() - endDocument() 是一个XML节点读取的过程,startElement() 用来初始判断,characters() 获取节点的字符数据,endDocument() 将数据写入数据结构。
package mytest.xml;  
  
import org.xml.sax.Attributes;  
import org.xml.sax.SAXException;  
import org.xml.sax.helpers.DefaultHandler;  
  
public class XmlHandler extends DefaultHandler {  
      
    private String _name = null, _address = null;  
    private int _id = 0, _age = 0, _flag = 0;   
      
    private String _str = "";     
    public String getString() {  
        return _str;  
    }  
  
    @Override  
    // 开始处理文档时触发   
    public void startDocument() throws SAXException {  
        super.startDocument();  
    }  
          
    @Override  
    // 开始处理元素时触发   
    public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {          
        if(localName.equalsIgnoreCase("Student"))  
        {  
            String tmp = attributes.getValue("id");  
            if(tmp != null)     _id = Integer.parseInt(tmp);  
        }  
        else if(localName.equalsIgnoreCase("name"))  
            _flag = 1;  
        else if(localName.equalsIgnoreCase("age"))  
            _flag = 2;  
        else if(localName.equalsIgnoreCase("address"))  
            _flag = 3;  
    }    
      
    @Override  
    // 处理元素字符内容时触发   
    public void characters(char[] ch, int start, int length) throws SAXException {  
        String tmp = new String(ch, start, length);  
        if(_flag == 1)      _name = tmp;  
        else if(_flag == 2)     _age = Integer.parseInt(tmp);  
        else if(_flag == 3)     _address = tmp;  
        _flag = 0;  
        super.characters(ch, start, length);  
    }    
            
    @Override  
    // 元素处理结束时触发   
    public void endElement(String uri, String localName, String name)   
            throws SAXException {  
        if(localName.equalsIgnoreCase("Student"))  
        {  
            this._str += this._name + "n" + "Id: " + this._id + "nAge: " + this._age +   
                "nAddress: " + this._address + "nn";  
        }  
        super.endElement(uri, localName, name);  
    }   
      
    @Override  
    // 文档处理结束时触发   
    public void endDocument() throws SAXException {  
        super.endDocument();  
    }  
}  
2. 主activity
package mytest.xml;  
  
import java.io.File;  
import javax.xml.parsers.SAXParser;  
import javax.xml.parsers.SAXParserFactory;  
  
import Android.app.Activity;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.TextView;  
  
public class TestActivity extends Activity {  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        Button btn = (Button)this.findViewById(R.id.xmlReadBtn);  
        btn.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View args0) {  
                TextView text = (TextView)findViewById(R.id.xmlPathEdit);  
                String str = readXml(text.getText().toString());  
                text = (TextView)findViewById(R.id.shownText);  
                if(str != null)       
                    text.setText(str);  
            }  
        });  
    }  
      
    private String readXml(String filepath) {  
        String str = null;  
        File f = new File(filepath);  
        if(f.exists())  
        {  
            SAXParserFactory factory = SAXParserFactory.newInstance();  
            try {  
                SAXParser sp = factory.newSAXParser();  
                XmlHandler handler = new XmlHandler();  
                sp.parse(f, handler);  
                str = handler.getString();  
            } catch(Exception e) {  
                e.printStackTrace();  
            }  
        }  
        return str;  
    }  
}  
3. 页面代码
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
              android:orientation="vertical"  
              android:layout_width="fill_parent"  
              android:layout_height="fill_parent"  
              android:weightSum="1">  
                
    <TextView android:layout_width="wrap_content"  
              android:layout_height="wrap_content"  
              android:text="Path:"  
              android:textSize="8pt"  
              android:gravity="left" />  
                
    <LinearLayout android:layout_height="wrap_content"  
                  android:orientation="horizontal" android:layout_width="fill_parent">  
                
        <EditText android:id="@+id/xmlPathEdit"   
                  android:layout_width="278dp"   
                  android:layout_height="wrap_content"/>  
                    
        <Button android:layout_height="40dp"   
                android:text="OK"   
                android:layout_width="wrap_content"   
                android:id="@+id/xmlReadBtn" />  
                    
    </LinearLayout>  
      
    <TextView android:layout_width="fill_parent"   
              android:layout_height="wrap_content"  
              android:id="@+id/shownText"  
              android:textSize="8pt"  
              android:gravity="left"   
              android:layout_weight="0.86"/>  
                
</LinearLayout>  
4. 读取的xml文件结构
<?xml version="1.0" encoding="utf-8" standalone="yes"?>  
<Students count="2">  
    <Student id="0">  
        <name>Bill</name>  
        <age>13</age>  
        <address>ABCDEFG</address>  
    </Student>  
    <Student id="1">  
        <name>Nancy</name>  
        <age>17</age>  
        <address>HIJKLMN</address>  
    </Student>  
</Students>  
 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读