Android sax引擎读取xml文件的原理
来源:互联网 发布:设计图片软件 编辑:程序博客网 时间:2024/05/21 06:30
sax引擎读取xml文件的原理:
使用sax处理xml需要一个Handler对象,一般会使用org.xml.sax.helpers.DefaultHandler的子类作为Handler对象
sax技术在处理xml文件时并不一次性把xml文件装入内存,而是一边读一般解析,因此,这就需要处理如下5个分析点,也可称为分析事件:
1. 开始分析xml文件。该分析点表示sax引擎刚开始处理xml文件,还没有读取xml文件中的内容。该分析点对应于DefaultHandler类中的startDocument()事件方法,可以在该方法中做一下初始化的工作!
2. 开始处理每一个xml元素,也就是遇到<product>,<item>这样的起始标记,sax引擎每次扫描到新的xml元素的起始标记会触发这个分析事件,对应的事件分析方法是startElement,在该方法中可以获取当前元素的名称和元素属性的相关信息
3. 处理完一个xml元素,也就是遇到</product>,</item>这样的结束标记,该分析点对应的事件方法是endElement,在该事件中可以获得当前处理完的元素的全部信息。
4. 处理完xml文件。如果sax引擎将整个xml文件的内容都扫描完了,就到了这个分析点,该分析点对应的事件方法endDocument(),该事件方法可能不是必需的,如果最后有以下收尾工作,如释放一下资源,可以在该方法中完成!
5. 读取字符分析点。这是最重要的分析点。如果没有这个分析点,前4步的处理相当于白跑一遍,虽然读取了xml文件中的所有内容,但并未保存这些内容,而这个分析点所对应的characters事件方法的主要作用就是保存sax引擎读取的xml文件中的内容。更准确地说是保存xml元素的文本,也就是<product>abc</product>中的abc
了解了sax引擎读取xml文件的原理,使用起来将会容易很多。
下面通过介绍一个实例,将xml文件装换成一个java对象来熟悉sax引擎操作xml文件的流程
1.首先在assets文件夹中创建products.xml:
<?xml version="1.0" encoding="utf-8"?><products><product><id>10</id><name>电脑</name><price>2067.25</price></product><product><id>20</id><name>微波炉</name><price>520</price></product><product><id>30</id><name>洗衣机</name><price>2400</price></product></products>
2. 继承DefaultHandler,编写xml处理类,关键代码:
@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {buffer.append(ch, start, length);//android.util.Log.e(TAG, "characters:"+buffer.toString());super.characters(ch, start, length);}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {if (localName.equals("product")) {products.add(product);} else if (localName.equals("id")) {product.setId(Integer.parseInt(buffer.toString().trim()));buffer.setLength(0);} else if (localName.equals("name")) {product.setName(buffer.toString().trim());buffer.setLength(0);} else if (localName.equals("price")) {product.setPrice(Float.parseFloat(buffer.toString().trim()));buffer.setLength(0);}super.endElement(uri, localName, qName);}@Overridepublic void startDocument() throws SAXException {products = new ArrayList<Product>();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if (localName.equals("product")) {product = new Product();}super.startElement(uri, localName, qName, attributes);}
3.显示products.xml文件,关键代码:
Button mButton = (Button) findViewById(R.id.MyButton);mButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {InputStream mInputStream = null;try {mInputStream = getResources().getAssets().open("products.xml");} catch (IOException e1) {e1.printStackTrace();}XML2Product xml2Product = new XML2Product();try {android.util.Xml.parse(mInputStream, Xml.Encoding.UTF_8,xml2Product);} catch (IOException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();}List<Product> products = xml2Product.getProducts();String msg = "共" + products.size() + "个产品\n";for (Product product : products) {msg += "id:" + product.getId() + " 产品名:"+ product.getName() + " 价格:" + product.getPrice()+ "\n";}new AlertDialog.Builder(MainActivity.this).setTitle("产品信息").setMessage(msg).setPositiveButton("关闭", null).show();}});}
完整代码下载:http://download.csdn.net/detail/dadaxiaoxiaode/5873893
- Android sax引擎读取xml文件的原理
- Android SAX读取XML文件
- android 实用sax 读取xml文件内容
- Android --- 使用SAX读取xml文件
- android 实用sax 读取xml文件内容
- Android使用SAX读取XML文件内容
- android中使用SAX读取XML文件
- Android 使用SAX读取XML文件
- Android --- sax读取xml文件要点
- SAX 读取xml文件
- SAX读取XML文件
- SAX读取xml文件的方法总结
- Android:采用SAX解析XML的原理
- 使用SAX读取XML文件
- 使用SAX读取XML文件
- SAX方式读取XML文件
- 使用SAX读取XML文件
- android 实用sax 读取xml文件内容 附源码
- 使用layer显示弹出框笔记
- hdu 2222
- rman之检测受损块
- iOS App升级安装 - CoreData数据库升级
- Metro
- Android sax引擎读取xml文件的原理
- js中通过<s:iterator>标签给一个数组赋值
- 基于地图开发控件GMap.Net 使用
- Socket 和 HTTP 协议
- Mac OS X下PHP+Apache+MySQL+ZendStudio开发环境的配置
- SQL Server迭代求和
- 九度笔记之 1333:考研海报(25分)
- Oracle 11g导出的dmp文件导入到10g
- 在iOS开发中使用FMDB