使用SAX解析XML文件

SAX(Simple API for XML),是指一种接口,或者一个软件包。

DOM:文档驱动。DOM在解析文件之前把整个文档装入内存,处理大型文件时其性能很差,是由于DOM的树结构所造成的,此结构占用的内存较多。

SAX:事件驱动型的XML解析方式。顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问,且是只读的。

由于移动设备的内存资源有限,SAX的顺序读取方式更适合移动开发。

SAX解析XML步骤
①创建XML解析处理器。
②创建SAX解析器。
③将XML解析处理器分配给解析器。
④对文档进行解析,将每个事件发送给处理器。

下面是SAX解析XML文件的代码程序,完整代码下载地址:android_sax.rar

MainActivity:

[java] view plaincopy
/**
* MainActivity
*
* @author zuolongsnail
*
*/
public class MainActivity extends Activity {
private Button parseBtn;
private ListView listView;
private ArrayAdapter adapter;
private ArrayList persons;

@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
    parseBtn = (Button) findViewById(R.id.parse);  
    listView = (ListView) findViewById(R.id.list);  
    parseBtn.setOnClickListener(new OnClickListener() {  
        @Override  
        public void onClick(View v) {  
            persons = MainActivity.this.readXml();  
            adapter = new ArrayAdapter<Person>(MainActivity.this,  
                    android.R.layout.simple_expandable_list_item_1, persons);  
            listView.setAdapter(adapter);  
        }  
    });  
}  

private ArrayList<Person> readXml() {  
    InputStream file = this.getClass().getClassLoader()  
            .getResourceAsStream("persons.xml");  
    // ①创建XML解析处理器  
    SAXXmlContentHandler contentHandler = new SAXXmlContentHandler();  
    try {  
        // 创建一个SAXParserFactory  
        SAXParserFactory factory = SAXParserFactory.newInstance();  
        // ②创建SAX解析器  
        SAXParser parser = factory.newSAXParser();  
        // ③将XML解析处理器分配给解析器  
        // ④对文档进行解析,将每个事件发送给处理器。  
        parser.parse(file, contentHandler);  
        file.close();  

    } catch (Exception e) {  
        e.printStackTrace();  
    }  
    return contentHandler.getBooks();  
}  

文章原文:http://blog.csdn.net/zuolongsnail/article/details/6453468

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值