Android之Sax解析xml(4)
程序员文章站
2022-07-12 18:10:32
...
在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()) ; } } }
读取效果同上节课。
上一篇: 超薄本笔记本如何清灰--真的是全拆完了呀
下一篇: 超薄本笔记本如何清灰--真的是全拆完了呀