Android之Sax解析xml(4)
16lz
2021-01-25
阅读更多
在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 Listall = 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();}Listall = sax.getAll() ;System.out.println(all.size());MainActivity.this.name.setText(all.get(0).getName()) ;MainActivity.this.email.setText(all.get(0).getEmail()) ;}}}
读取效果同上节课。
更多相关文章
- 手把手带你搭建 Elasticsearch 集群
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- Android全局异常捕获
- Android实现RecyclerView的下拉刷新和上拉加载更多
- 如何使用 Bundle 传递数据?
- 详解Android中通过Intent类实现组件间调用的方法
- android 中 startActivityForResult 的使用方法