在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<LinkMan> all = null ; // 保存多条数据 private LinkMan man = null ; private String elementName = null ; // 保存节点的名称 @Override public 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) ; } } } @Override public 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;// 把元素名称清空 } @Override public void startDocument() throws SAXException { this.all = new ArrayList<LinkMan>() ; // 表示开始解析文档,所以要设置集合 } @Override public 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<LinkMan> getAll() { return all; } }
最后定义Activity:
public class MainActivity extends Activity { private TextView name = null; private TextView email = null; private Button but = null; @Override public 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 { @Override public 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 block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { parser.parse(file, sax) ; } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } List<LinkMan> all = sax.getAll() ; System.out.println(all.size()); MainActivity.this.name.setText(all.get(0).getName()) ; MainActivity.this.email.setText(all.get(0).getEmail()) ; } } }
读取效果同上节课。
相关推荐
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
Android之SAX解析
使用sax解析从网络上获取的xml文件
android使用SAX解析XML
android 使用sax解析XML,内含视频和源码已经说明文档。非常详细
Android SAX 解析XML SAX 解析XML(通用)
Android中SAX解析XML的demo
Sax解析xml文件详细例子,解析复杂节点的xml,把内容显示到view中,例子简单完整,易用
android中用sax解析xml模板的demo源码,解压出来将解析类导入其他工程就可用了不必再写了.
Android 创建与解析XML Sax方式
android sax解析xml 完整的例子及说明,解压后就可以运行,相信你的选择
android用sax解析xml文件实例源码
android 以SAX方式解析xml
android SAX解析XML
android 使用 sax 去解析xml。
www.mars-droid.com/Android开发视频教程 代码 源码 mars老师讲课 android 视频源码 SAX解析XML xml 源码(在此特别感谢mars的无私奉献,此代码为跟随视频边学边做的)
Android XML解析之SAX解析 简单方便的解析方法
XML解析之SAX解析DEMO,之前在播控上有介绍,但是代码排版太乱了,这个就是Android4.0网络编程中的SAX解析例子。
android sax解析创建xml源码,其中包含两种解析xml的方式。
行业文档-设计装置-基于android平台SAX解析XML错误问题的方法.zip