博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数据存储】SAX操作
阅读量:6049 次
发布时间:2019-06-20

本文共 5181 字,大约阅读时间需要 17 分钟。

DOMSAX区别

DOM解析适用于对文件进行修改和随机存取的操作,但是不适合于大型文件的操作;

SAX采用部分读取的方式,所以可以进行大型文件处理,而且只需要从文件中读取特定内容,而且SAX解析可以由用户自己建立对象模型。

 

     下面采用SAX解析方式读取之前的member.xml文件。如果要完成SAX解析,首先必须定义一个SAX解析器,以及一个xml信息的简单Java---LinkMan.java

 

public class LinkMan {    private String name;    private String email;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }}

 

 

 

member.xml文件中,每一个linkman节点都有nameemail两个节点,所以LinkMan.java类的主要功能是保存每组节点中的数据。

【定义SAX解析器,此类继承DefaultHandler

 

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 MySAX extends DefaultHandler {    // 保存多条数据    private List
all = null ; // 定义封装对象 private LinkMan man = null ; // 保存节点的名称 private String elementName = null ; @Override // 取得元素内容 public void characters(char[] ch, int start, int length) throws SAXException { if(this.elementName != null) { // 已经取得了元素名称 String data = new String(ch,start,length) ; if("name".equals(this.elementName)) { this.man.setName(data) ; // 设置name属性 } else if ("email".equals(this.elementName)) { this.man.setEmail(data) ; // 设置email属性 } } } @Override // 元素结束 public void endElement(String uri, String localName, String qName) throws SAXException { if("linkman".equals(localName)) { this.all.add(this.man) ; // 准备保存下次的数据 this.man = null ; } // 把元素名称清空 this.elementName = null; } @Override // 开始文档 public void startDocument() throws SAXException { // 表示开始解析文档,所以要设置集合 this.all = new ArrayList
() ; } @Override // 开始元素 public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException { // 是一个linkman节点 if("linkman".equals(localName)) { // 实例化LinkMan对象 this.man = new LinkMan() ; } // 保存元素名称 this.elementName = localName ; } public List
getAll() { return all; /** 表示取得全部内容节点内容 */ }}
View Code

 

 

 

 

 

本解析器的主要功能是将指定XML文档中的数据全部取出,并且将数据封装成LinkMan类的对象保存在List集合中,由于SAX解析采用的顺序的方式,所以每次操作都要对当前的操作节点进行判断,并且将指定的数据取出,最后所有的数据可以通过getAll()方法返回。

 

【定义Activity程序

 

 

import java.io.File;import java.io.IOException;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MyDOMDemo extends Activity {    private TextView name = null;    private TextView email = null;    private Button but = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        super.setContentView(R.layout.main);        this.name = (TextView) super.findViewById(R.id.name);        this.email = (TextView) super.findViewById(R.id.email);        this.but = (Button) super.findViewById(R.id.but);        this.but.setOnClickListener(new OnClickListenerImpl());    }    private class OnClickListenerImpl implements OnClickListener {        @Override        public void onClick(View v) {            // 不存在不操作            if (!Environment.getExternalStorageState().equals(                    Environment.MEDIA_MOUNTED)) {                 return; // 返回到程序的被调用处            }            File file = new               File(Environment.getExternalStorageDirectory()                    + File.separator + "mldndata" + File.separator                    + "member.xml"); // 要输出文件的路径            if (!file.exists()) { // 文件不存在                return;            }            // 1、建立SAX解析工厂            SAXParserFactory factory =                  SAXParserFactory.newInstance() ;            // 2、构造解析器            SAXParser parser = null ;            MySAX sax = new MySAX() ;            try {                // 取得SAXParser对象                parser = factory.newSAXParser() ;            } catch (ParserConfigurationException e) {                e.printStackTrace();            } catch (SAXException e) {                e.printStackTrace();            }            try {                // 3、解析XML使用DefaultHandler                parser.parse(file, sax) ;            } catch (SAXException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }            // 取得联系人信息            List
all = sax.getAll() ; System.out.println(all.size()); // 设置文本 MyDOMDemo.this.name.setText(all.get(0).getName()) ; MyDOMDemo.this.email.setText(all.get(0).getEmail()) ; } }}
View Code

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:http://spxex.baihongyu.com/

你可能感兴趣的文章
第一周博客作业
查看>>
thinkpython2
查看>>
oracle recyclebin与flashback drop
查看>>
svmlight使用说明
查看>>
Swing 和AWT之间的关系
查看>>
Mysql设置自增长主键的初始值
查看>>
获取post传输参数
查看>>
ASP生成静态页面的方法
查看>>
HDU 1325 Is It A Tree? 判断是否为一棵树
查看>>
Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
查看>>
Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
查看>>
shell初涉
查看>>
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
查看>>
关于云栖,有点无语的几个地方,管理能不能管?
查看>>
Windows线程的同步与互斥
查看>>
C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入
查看>>
linux系统下安装两个或多个tomcat
查看>>
ProtoBuffer 简单例子
查看>>
iOS多线程开发系列之(一)NSThread
查看>>
微信小程序初体验(上)- 腾讯ISUX社交用户体验设计成员出品
查看>>