Android中使用SAX对XMl文件进行解析
Android中使用SAX对XMl文件进行解析
在Android中的xml的文件解析,一般有三种方法 sax,dom,pull; 不过一般使用最多的是sax技术;在Java中使用SAX技术解析XML文档 见sax解析技术是解析速度很快,并且占用很小量的内存;sax解析的方法是进行事件驱动的方法,相对于dom技术必须要调用这个xml文档到内存中,他不需要整个xml文档,
按顺序进行解析,按要求把xml当如到内存中;当我们在解析的时候,会按照要求触发一系列的回调方法,这些方法我们可以在ContentHandler接口中找到,不过如果实现这个接口,我们要去实现里面所有的方法,方法比较多;不过我们可以去继承已经实现该接口的DefaultHandler类;
本文源码下载地址
免费下载地址在 http://linux.bkjia.com/
用户名与密码都是www.bkjia.com
具体下载目录在 /2012年资料/1月/13日/Android中使用SAX对XMl文件进行解析/
可以重写一下一些方法:
1: startDocument() 这是解析到文档开始的时候,可以去做一些初始化或者预处理的事情
2:endDocument() 这是解析到文档结束的时候,可以去做一些收尾的事情
3:startElement(StringnamespaceURI, StringlocalName, StringqName, Attributesatts)
这是读到一个元素的时候,会触发这个方法 参数意思:
namespaceURI 命名空间,如果没有命名空间填写""; localName:当前解析到的元素名字; qName:命名空间+当前解析到的元素名字;atts:当前解析到元素的属性
4:endElement(Stringuri, StringlocalName, String name)
这个方法和
startElement
方法相对应,在遇到结束标签的时候,调用.5:characters(char[]ch,int start,int length) 调用这个方法,取出解析到的文本内容
使用步骤:(使用以下的XML文件)
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="1">
<name>张三</name>
<age>30</age>
</student>
<student id="2">
<name>李四</name>
<age>24</age>
</student>
</students>
1:创建继承于DefaultHandler解析帮组类;
2:在创建读取方法里面进行SAX解析:
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
SAXXMLHandler handler = new SAXXMLHandler();
parser.parse(inputStream, handler);
下面直接看Demo代码:
解析帮助类:
[java]
- package com.jiangqq.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;
- import com.jiangqq.bean.Person;
- import com.jiangqq.bean.Student;
- public class SAXXMLHandler extends DefaultHandler {
- private Student student;
- private List<Student> list;
- private String tag;
- public List<Student> getList() {
- return list;
- }
- @Override
- public void startDocument() throws SAXException {
- super.startDocument();
- list = new ArrayList<Student>();
- }
- @Override
- public void endDocument() throws SAXException {
- super.endDocument();
- }
- @Override
- public void startElement(String uri, String localName, String qName,
- Attributes attributes) throws SAXException {
- super.startElement(uri, localName, qName, attributes);
- if ("student".equals(localName)) {
- student = new Student();
- student.setId(new Integer(attributes.getValue("", "id")));
- }
- tag = localName;
- }
- @Override
- public void endElement(String uri, String localName, String qName)
- throws SAXException {
- super.endElement(uri, localName, qName);
- if (student != null && localName.equals("student")) {
- list.add(student);
- student = null;
- }
- tag = null;
- }
- @Override
- public void characters(char[] ch, int start, int length)
- throws SAXException {
- super.characters(ch, start, length);
- if ("name".equals(tag)) {
- if (student != null) {
- student.setName(new String(ch, start, length));
- }
- } else if ("age".equals(tag)) {
- if (student != null) {
- student.setAge(new Short(new String(ch, start, length)));
- }
- }
- }
- }
主Activity类
[java]
- package com.jiangqq.activity;
- import java.io.InputStream;
- import java.util.List;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- import com.jiangqq.bean.Person;
- import com.jiangqq.bean.Student;
- import com.jiangqq.sax.R;
- import com.jiangqq.sax.SAXXMLHandler;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.TextView;
- import android.widget.Toast;
- public class XmlMainActivity extends Activity {
- private Button saxbtn;
- private TextView tv;
- private List<Student> students;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- saxbtn = (Button) findViewById(R.id.et1);
- tv = (TextView) findViewById(R.id.tv);
- saxbtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- InputStream inputStream = XmlMainActivity.class
- .getClassLoader().getResourceAsStream("student.xml");
- students = readSAXXML(inputStream);
- String string = "使用SAX解析结果如下:" + "\n";
- for (Student student : students) {
- string += student.toString();
- string += "\n";
- }
- tv.setText(string);
- }
- });
- }
- public List<Student> readSAXXML(InputStream inputStream) {
- try {
- SAXParserFactory spf = SAXParserFactory.newInstance();
- SAXParser parser = spf.newSAXParser();
- SAXXMLHandler handler = new SAXXMLHandler();
- parser.parse(inputStream, handler);
- inputStream.close();
- return handler.getList();
- } catch (Exception e) {
- Toast.makeText(this, "使用SAX进行XML文件解析失败", Toast.LENGTH_LONG).show();
- }
- return null;
- }
- }
解析效果截图:
评论暂时关闭