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操作中所有内容一次性全部读取进来。比较消耗内存。