android中sax解析xml,android中sax解析xml 操作介绍

step1 编写bean

package com.activity;

public class LinkMan {

private String name;

private String email;

private String linkman;

public String getLinkman() {

return linkman;

}

public void setLinkman(String linkman) {

this.linkman = linkman;

}

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;

}

}

step2 继承DefaultHandler实现一个sax事件解析器

package com.activity;

import java.util.ArrayList;

import java.util.List;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

/**

* 创建sax解析器

*

* @author Administrator

*

*/

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);

} else if ("email".equals(this.elementName)) {

this.man.setEmail(data);

}

}

}

@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 {

// TODO Auto-generated method stub

if ("linkman".equals(localName)) {// 是linkman节点

this.man = new LinkMan();

}

this.elementName=localName;

}

public List getAll() {

return all;

}

public void setAll(List all) {

this.all = all;

}

}

step3 在activity中创建操作sax

package com.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;

/**

* sax操作

*

* @author Administrator

*

*/

public class DOMProjectActivity extends Activity {

/** Called when the activity is first created. */

private TextView nameView = null;

private TextView emailView = null;

private Button but = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

this.nameView = (TextView) findViewById(R.id.name);

this.emailView = (TextView) findViewById(R.id.email);

this.but = (Button) findViewById(R.id.but);

this.but.setOnClickListener(new OnClickListenerImpl());

}

private class OnClickListenerImpl implements OnClickListener {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

if (!Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED)) {// sdcard不存在

return;// 返回程序被调用处

}

File file = new File(Environment.getExternalStorageDirectory()

+ File.separator + "mldndata" + File.separator + "mldn.xml");// 要输出文件的路径

if (!file.exists()) {// 父路径不存在

return;

}

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = null;

MySax sax = new MySax();

try {

parser = factory.newSAXParser();

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

}

try {

parser.parse(file, sax);

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

List all = sax.getAll();

DOMProjectActivity.this.nameView.setText(all.get(0).getName());

DOMProjectActivity.this.emailView.setText(all.get(0).getEmail());

}

}

}

sax与dom操作的区别在于dom操作中所有内容一次性全部读取进来。比较消耗内存。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值