在android中的xml的文件解析,一般有三种方法 sax,dom,pull; 不过一般使用最多的是sax技术;在Java中使用SAX技术解析XML文档

sax解析技术是解析速度很快,并且占用很小量的内存;sax解析的方法是进行事件驱动的方法,相对于dom技术必须要调用这个xml文档到内存中,他不需要整个xml文档,

按顺序进行解析,按要求把xml当如到内存中;当我们在解析的时候,会按照要求触发一系列的回调方法,这些方法我们可以在ContentHandler接口中找到,不过如果实现这个接口,我们要去实现里面所有的方法,方法比较多;不过我们可以去继承已经实现该接口的DefaultHandler类;
可以重写一下一些方法:

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代码:

解析帮助类:

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类

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

解析效果截图:

Demo下载链接:http://download.csdn.net/detail/jiangqq781931404/4018127

更多相关文章

  1. Android(安卓)ContentProvider数据共享全解析
  2. # Android的按键消息分发机制
  3. Android(安卓)性能监测工具,优化内存、卡顿、耗电、APK的方法
  4. Android中微信支付的调用方法
  5. android导入外部数据库到项目中的使用方法
  6. 在移动开发中,关于发送消息及解析消息响应的一点方法
  7. Android消息循环机制分析
  8. android保存数据的四种方法
  9. Android判断设备网络连接状态及判断连接方式的方法

随机推荐

  1. 设置Android设备按Power按键不休眠
  2. Android启动脚本init.rc 2
  3. MacBook下配置android adb命令使用环境
  4. Android的Activity跳转动画各种效果整理
  5. 浅谈Android开机启动速度优化(含应用程序
  6. 在android studio中导入cocos2dx中的andr
  7. Android期末复习题
  8. Android中使用Espresso进行UI测试
  9. Android之网络请求4————OkHttp源码1:
  10. Android 导入v7包常见错误