Android_Sax引擎读取xml文件
来源:互联网 发布:合肥百度seo教程 编辑:程序博客网 时间:2024/05/22 14:48
本文内容来自<android开发权威指南>。
SAX技术在处理XML文件时,并不是一次性把XML文件装入内存,而是一边读,一边解析。因此,这就需要处理如下5个分析点。
1、开始分析xml文件。该分析点表示sax引擎刚开始处理xml文件,还没读取xml文件中的内容。对应于DefaultHandler.startDocument方法。
2、开始处理每个xml标签。也就是遇到<product>、<item>这样的起始标记。对应startElement放法。
3、处理完一个xml标签,即</product>这样的结束标记。对应于endElement方法。
4、处理完xml文件。如果sax引擎将整个xml文件的内容都扫描完了,就到了这个分析点。该分析点对应endDocument方法。该事件不是必须的,如果最后有一些收尾的工作,如释放资源,可以再改方法中完成。
5、读取字符分析点。只是最重要的分析点,如果没有这个分析点,前4步的处理相当于白跑一遍,虽然读取了xml文件中的所有内容,但并未处理这些内容,而这个分析点对应的characters事件方法的主要作用就是处理sax引擎读取的xml文件中的内容,更准确的说是保存xml标签的内容,如<product>abc</product>中的abc.
核心代码为:
package com.zlf.sax;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class XmlProduct extends DefaultHandler{private List<Product> products;private Product product;private StringBuffer buffer = new StringBuffer();public List<Product> getProducts(){return products;}@Overridepublic void startDocument() throws SAXException{// TODO Auto-generated method stubsuper.startDocument();products = new ArrayList<Product>();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException{// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);if(localName.endsWith("product")){//如果开始分析的是<product>标签,创建一个Product对象product = new Product();}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException{// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);if (localName.equals("product")){products.add(product);}else if (localName.equals("id")){//设置id的值product.setId(Integer.parseInt(buffer.toString().trim()));//将保存标签内容的缓冲区清空buffer.setLength(0);}else if (localName.equals("name")) {//设置name的值product.setName(buffer.toString().trim());buffer.setLength(0);}else if (localName.equals("price")) {//设置price的值product.setPrice(buffer.toString().trim());buffer.setLength(0);}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException{buffer.append(ch,start,length);// TODO Auto-generated method stubsuper.characters(ch, start, length);}}
在主类中的方法为:
public void button_Sax(View view){try{//获得res/raw/product.xml文件中的InputStream对象//相当于获取解析对象InputStream is = getResources().openRawResource(R.raw.products);XmlProduct xmlProduct = new XmlProduct();//开始解析products.xml文件Xml.parse(is, Xml.Encoding.UTF_8,xmlProduct);//下面的代码用于输出转换后的java对象的内容List<Product> products = xmlProduct.getProducts();String msg ="共" + products.size()+"产品\n";for(Product product :products){msg +="id"+product.getId()+" 产品名:"+product.getName()+" 价格"+product.getPrice()+"\n";}new AlertDialog.Builder(this).setTitle("产品信息").setMessage(msg).setPositiveButton("关闭", null).show();} catch (Exception e){// TODO: handle exception}}效果图如下:
源码下载:
http://download.csdn.net/download/zlfxy/5098147
- Android_Sax引擎读取xml文件
- Android sax引擎读取xml文件的原理
- android_sax解析
- SAX 读取xml文件
- xml文件读取
- 读取xml文件内容
- 读取xml 文件
- JAVA读取XML文件
- 读取远程xml文件
- XML文件的读取
- Xml文件的读取
- JAVA读取XML文件
- 读取XML文件
- flash读取xml文件
- C#读取XML文件
- javascript 读取XML文件
- 读取xml 文件
- XML文件的读取
- linux proftp 配置
- jvm原理及优化
- Wireshark基本介绍和学习TCP三次握手
- 朴素字符串匹配
- locate命令无法查找
- Android_Sax引擎读取xml文件
- 常用mysql 命令
- struts2 word、excel文件的上传。用到RandomAccessFile 类读取文件。
- linux 虚拟控制台
- c++ 命名空间
- java.lang.NoClassDefFoundError原因
- linux内核模块操作详解
- 网络数据获取
- struts2 word、excel文件的下载