阅读更多

                   在Android中xml解析还是很重要的,主要有两种方法,一种是之前讲到的DOM解析,一种就这节课

Sax解析,其实两种解析的基本形式异曲同工。

第一步:定义节点

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

然后我们定义解析器,sax解析器功能是将xml文件数据全部取出,并且将数据封装的对象保存在list中,采取顺序方式,每次取出进行判断,并且将指定数据提出,最后将所有数据用getall拿出

public class MySax extends DefaultHandler {private List all = null ;// 保存多条数据private LinkMan man = null ;private String elementName = null ;// 保存节点的名称@Overridepublic 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) ;}}}@Overridepublic 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;// 把元素名称清空}@Overridepublic void startDocument() throws SAXException {this.all = new ArrayList() ;// 表示开始解析文档,所以要设置集合}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if("linkman".equals(localName)) {// 是一个linkman节点this.man = new LinkMan() ;// 实例化LinkMan对象}this.elementName = localName ;// 保存元素名称}public List getAll() {return all;}}

  最后定义Activity:

public class MainActivity extends Activity {private TextView name = null;private TextView email = null;private Button but = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.activity_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 {@Overridepublic 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;}SAXParserFactory factory = SAXParserFactory.newInstance() ;SAXParser parser = null ;MySax sax = new MySax() ;try {parser = factory.newSAXParser() ;} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {parser.parse(file, sax) ;} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}List all = sax.getAll() ;System.out.println(all.size());MainActivity.this.name.setText(all.get(0).getName()) ;MainActivity.this.email.setText(all.get(0).getEmail()) ;}}}

 读取效果同上节课。

 

更多相关文章

  1. 手把手带你搭建 Elasticsearch 集群
  2. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  3. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  4. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  5. Android全局异常捕获
  6. Android实现RecyclerView的下拉刷新和上拉加载更多
  7. 如何使用 Bundle 传递数据?
  8. 详解Android中通过Intent类实现组件间调用的方法
  9. android 中 startActivityForResult 的使用方法

随机推荐

  1. Android 数据存储之文件存储小记
  2. Android UI设计——EditText控件
  3. android 快速入门之一 “Hello world”,以
  4. 3.EditText控件
  5. Android:BottomNavigationView设置noActio
  6. android:configChanges
  7. android 实现 搜索保存历史记录功能
  8. 在android的Browser中设置User Agent
  9. Android系列教程之四:Android项目的目录结
  10. Android JNI环境搭建及开发入门