当前位置:编程学习 > XML/UML >>

Android_XML文件解析

      在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式,今天学习了Android—XML文件解析三种方法中的一种较常用的SAX,它不能向文件中添加内容。

 这种方式解析是一种基于事件驱动的api,有两个部分,解析器和事件处理器,解析器就是XMLReader接口,负责读取XML文档,和向事件处理器发送事件(也是事件源),事件处理器ContentHandler接口,负责对发送的事件响应和进行XML文档处理。

public abstract void characters (char[] ch, int start, int length)

      这个方法来接收字符块通知,解析器通过这个方法来报告字符数据块,解析器为了提高解析效率把读到的所有字符串放到一个字符数组(ch)中,作为参数传递给character的方法中,如果想获取本次事件中读取到的字符数据,需要使用start和length属性。

    public abstract void startDocument () 接收文档开始的通知

     public abstract void endDocument () 接收文档结束的通知

    public abstract void startElement (String uri, String localName, String qName, Attributes atts) 接收文档开始的标签

    public abstract void endElement (String uri, String localName, String qName) 接收文档结束的标签

    在一般使用中为了简化开发,在org.xml.sax.helpers提供了一个DefaultHandler类,它实现了ContentHandler的方法,我们只想继承DefaultHandler方法即可。(适配器模式)

   另外SAX解析器提供了一个工厂类:SAXParserFactory,SAX的解析类为SAXParser 可以调用它的parser方法进行解析。

代码:


[java]  import java.io.IOException; 
import java.io.InputStream; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.parsers.SAXParserFactory; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 
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 Xml extends Activity { 
    private Button button; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_xml); 
        button=(Button)findViewById(R.id.button); 
        button.setOnClickListener(new buttonClickListener()); 
    } 
    class buttonClickListener implements OnClickListener 
    { 
 
        /* (non-Javadoc)
         * @see android.view.View.OnClickListener#onClick(android.view.View)
         */      
        @Override 
        public void onClick(View v) { 
            // TODO Auto-generated method stub  
            new Thread() 
            { 
                public void run() 
                { 
                    InputStream inputStream = null; 
                    try {//得到本软件上的文件  
                        inputStream = getResources().getAssets().open("test.xml"); 
                    } catch (IOException e1) { 
                        e1.printStackTrace(); 
                    } 
                     
                    try { 
                        //获得SAXParser对象的工厂实例  
                        SAXParserFactory saxParserFactory=SAXParserFactory.newInstance(); 
                        //获得XMLReader示例  
                        XMLReader reader=saxParserFactory.newSAXParser().getXMLReader(); 
                        //注册处理XML文档内容解析事件的ContentHandler  
                        reader.setContentHandler(new MyContentHandler()); 
                        //开始解析string对象中所包含的XML资源  
                        reader.parse(new InputSource(inputStream)); 
                    } catch (SAXException e) { 
                        // TODO Auto-generated catch block  
                        e.printStackTrace(); 
                    } catch (ParserConfigurationException e) { 
                        // TODO Auto-generated catch block  
                        e.printStackTrace(); 
                    } catch (IOException e) { 
&nb

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,