博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 中使用SAX解析XML实例
阅读量:5736 次
发布时间:2019-06-18

本文共 4446 字,大约阅读时间需要 14 分钟。

1. SAX

 SAX, 即Simple API for XML的缩写,是一种事件驱动的用于解析XML的API。

 解析器是XMLReader,事件处理器是ContentHandler接口。

2. 实例说明

 下面是一个包含人员信息的XML,需要完成的功能是用SAX解析人员信息,然后在Android App中用ListView显示。

View XML

实现步骤如下:

1)实现自己的事件处理器类SAXParseHandler,向外提供接口getData(),返回解析后的数据

1 package com.example.saxdemo.sax; 2  3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7  8 import org.xml.sax.Attributes; 9 import org.xml.sax.SAXException;10 import org.xml.sax.helpers.DefaultHandler;11 12 public class SAXParseHandler extends DefaultHandler {13 14     List
> list;15 HashMap
item;16 17 public List
> getData(){18 return list;19 }20 21 @Override22 public void characters(char[] ch, int start, int length)23 throws SAXException {24 // TODO Auto-generated method stub25 super.characters(ch, start, length);26 }27 28 @Override29 public void endDocument() throws SAXException {30 // TODO Auto-generated method stub31 super.endDocument();32 }33 34 @Override35 public void endElement(String uri, String localName, String qName)36 throws SAXException {37 // TODO Auto-generated method stub38 super.endElement(uri, localName, qName);39 if (localName.equals("person")){40 list.add(item);41 }42 }43 44 @Override45 public void startDocument() throws SAXException {46 // TODO Auto-generated method stub47 super.startDocument();48 list = new ArrayList
>();49 }50 51 @Override52 public void startElement(String uri, String localName, String qName,53 Attributes attributes) throws SAXException {54 // TODO Auto-generated method stub55 super.startElement(uri, localName, qName, attributes);56 item = new HashMap
();57 if (localName.equals("person")){58 for (int i=0; i
View SAXParseHandler

2) 在Activity中实现解析XML并得到ListView需要的数据的接口

   步骤:实例化一个SAXParseFactory --> 实例化SAXParser对象 --> 实例化事件处理器 --> 为XMLReader解析器注册一个事件处理器 --> 获取需要解析的XML文件的文件流 --> 开始解析XMLReader.parse()

1 List
> getData() throws ParserConfigurationException, SAXException, IOException{ 2 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); 3 SAXParser saxParser = saxParserFactory.newSAXParser(); 4 XMLReader xmlReader = saxParser.getXMLReader(); 5 SAXParseHandler saxParseHandler = new SAXParseHandler(); 6 xmlReader.setContentHandler(saxParseHandler); 7 8 InputStream inputStream = getResources().openRawResource(R.raw.persons); 9 xmlReader.parse(new InputSource(inputStream));10 return saxParseHandler.getData();11 }
View Parse XML Function

3) 用SimpleAdapter装载ListView

1 @Override 2     protected void onCreate(Bundle savedInstanceState) { 3         super.onCreate(savedInstanceState); 4         setContentView(R.layout.activity_main); 5          6         parseBtn = (Button) findViewById(R.id.button1); 7         listView = (ListView) findViewById(R.id.listView1); 8          9         parseBtn.setOnClickListener(new OnClickListener() {10             11             @Override12             public void onClick(View v) {13                 // TODO Auto-generated method stub14                 SimpleAdapter adapter = null;15                 try {16                     adapter = new SimpleAdapter(MainActivity.this, getData(), R.layout.person,17                             new String[]{"name", "id"}, 18                             new int[]{R.id.person_name, R.id.person_id});19                     listView.setAdapter(adapter);20                 } catch (ParserConfigurationException e) {21                     // TODO Auto-generated catch block22                     e.printStackTrace();23                 } catch (SAXException e) {24                     // TODO Auto-generated catch block25                     e.printStackTrace();26                 } catch (IOException e) {27                     // TODO Auto-generated catch block28                     e.printStackTrace();29                 }30             }31         });32     }
View Add SimpleAdapter to ListView

3. 运行效果

点击"Parse By SAX" 按钮时,会把XML中的数据显示到ListView上。

 

转载于:https://www.cnblogs.com/leon-/archive/2013/05/17/3083708.html

你可能感兴趣的文章
C# ASP.NET 权限设计 完全支持多数据库多语言包的通用权限管理系统组件源码
查看>>
测试工具综合
查看>>
asp.net中调用COM组件发布IIS时常见错误 80070005解决方案
查看>>
分享一段ios数据库代码,包括对表的创建、升级、增删查改
查看>>
如何书写高质量的jQuery代码
查看>>
Activity的生命周期整理
查看>>
【记录】JS toUpperCase toLowerCase 大写字母/小写字母转换
查看>>
在 Linux 系统中安装Load Generator ,并在windows 调用
查看>>
Visifire charts ToolBar
查看>>
Mysql查询
查看>>
数据传输流程和socket简单操作
查看>>
利用广播实现ip拨号——示例
查看>>
ProbS CF matlab源代码(二分系统)(原创作品,转载注明出处,谢谢!)
查看>>
OC中KVC的注意点
查看>>
JQ入门(至回调函数)
查看>>
1112: 零起点学算法19——输出特殊值
查看>>
【洛天依】几首歌的翻唱(无伴奏)
查看>>
strcspn
查看>>
OpenSSL初瞻及本系列的博文的缘由
查看>>
ISO8583接口的详细资料
查看>>