zoukankan      html  css  js  c++  java
  • Android SAX解析实例教程

     SAX(simpleAPIforXML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。
      下面对resources.xml文件进行解析
      1、源文件如下
    <resources>
            <resource>
                   <mp3.name>kong</mp3.name>
                    <mp3.author>侧田</mp3.author>
            </resource>
            <resource>
                   <mp3.name>蚂蚁</mp3.name>
                    <mp3.author>古巨基</mp3.author>
            </resource>
    </resources>


      2、创建Mp3Info.java实体bean类
    package cn.m9;

    public class Mp3Info {
    private String mp3Name;
    private String author;
    public Mp3Info() {
    }
    public Mp3Info(String mp3Name, String author) {
      super();
      this.mp3Name = mp3Name;
      this.author = author;
    }
    public String getMp3Name() {
      return mp3Name;
    }
    public void setMp3Name(String mp3Name) {
      this.mp3Name = mp3Name;
    }
    public String getAuthor() {
      return author;
    }
    public void setAuthor(String author) {
      this.author = author;
    }
    @Override
    public String toString() {
      return "Mp3Info [author=" + author + ", mp3Name=" + mp3Name + "]";
    }
    }

      3、创建Mp3ListContentHandler.java类,继承DefaultHandler类
    package cn.m9;
    import java.util.List;
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    public class Mp3ListContentHandler extends DefaultHandler {
    private Mp3Info mp3Info = null;
    private List<Mp3Info> mp3Infos = null;
    private String tagName = null;
    public Mp3ListContentHandler() {
      super();
    }
    public Mp3ListContentHandler(List<Mp3Info> mp3Infos) {
      super();
      this.mp3Infos = mp3Infos;
    }
    public List<Mp3Info> getMp3Infos() {
      return mp3Infos;
    }
    public void setMp3Infos(List<Mp3Info> mp3Infos) {
      this.mp3Infos = mp3Infos;
    }
    @Override
    public void startDocument() throws SAXException {
      // TODO Auto-generated method stub
      super.startDocument();
    }
    @Override
    public void startElement(String uri, String localName, String qName,
       Attributes attributes) throws SAXException {
      // TODO Auto-generated method stub
      tagName = localName;
      if (tagName.equals("resource")) {
       mp3Info = new Mp3Info();
      }
    }
    @Override
    public void characters(char[] ch, int start, int length)
       throws SAXException {
      // TODO Auto-generated method stub
      String tmp = new String(ch, start, length);
      if (tagName.equals("mp3.name")) {
       mp3Info.setMp3Name(tmp);
      } else if (tagName.equals("mp3.author")) {
       mp3Info.setAuthor(tmp);
      }
    }
    @Override
    public void endDocument() throws SAXException {
      // TODO Auto-generated method stub
      super.endDocument();
    }
    @Override
    public void endElement(String uri, String localName, String qName)
       throws SAXException {
      // TODO Auto-generated method stub
      tagName = localName;
      if (tagName.equals("resource")) {
       mp3Infos.add(mp3Info);
      }
      tagName = "";
    }
    }


      4、创建TestSAXActivity.java类
    package cn.m9;
    import java.io.StringReader;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import javax.xml.parsers.SAXParserFactory;
    import org.xml.sax.InputSource;
    import org.xml.sax.XMLReader;
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    public class TestSAXActivity extends Activity {
    /** Called when the activity is first created. */
    private String xml = "<resources><resource><mp3.name>kong</mp3.name><mp3.author>侧田</mp3.author></resource><resource><mp3.name>蚂蚁</mp3.name><mp3.author>古巨基</mp3.author></resource></resources>";
    private LinearLayout layout = null;
    private TextView tv = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      layout = (LinearLayout) this.findViewById(R.id.main);
      List<Mp3Info> infos = parseXml(xml);
      String text = null;
      for (Iterator i = infos.iterator(); i.hasNext();) {
       Mp3Info mp3 = (Mp3Info) i.next();
       text = "" + mp3.getMp3Name() + "                演唱:"
         + mp3.getAuthor();
       tv = new TextView(this);
       tv.setText(text);
       tv.setWidth(500);
       tv.setTextSize(20);
       layout.addView(tv);
      }
    }
    public List<Mp3Info> parseXml(String xmlStr) {
      // 创建SAXParserFactory解析器工厂
      SAXParserFactory parserFactory = SAXParserFactory.newInstance();
      List<Mp3Info> mp3Infos = null;
      Mp3Info mp3Info = null;
      try {
       // 创建XMLReader对象,xml文件解析器
       XMLReader xmlReader = parserFactory.newSAXParser().getXMLReader();
       mp3Infos = new ArrayList<Mp3Info>();
       // 注册内容事件处理器(设置xml文件解析器的解析方式)
       xmlReader.setContentHandler(new Mp3ListContentHandler(mp3Infos));
       // 开始解析xml格式文件
       xmlReader.parse(new InputSource(new StringReader(xmlStr)));
       for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
        mp3Info = (Mp3Info) mp3Infos.iterator();
       }
       mp3Infos.add(mp3Info);
      } catch (Exception e) {
       e.printStackTrace();
      }
      return mp3Infos;
    }
    }

    效果图:

  • 相关阅读:
    bootmgr is missing
    【转】ahci和IDE的区别
    win10系统故障代码:0xc000014c
    c++小数点后舍入
    关于类里再声明自身类实例的思考
    Java集合
    Python图片转字符画
    102. Binary Tree Level Order Traversal
    1041. Robot Bounded In Circle
    144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/jackrex/p/3001246.html
Copyright © 2011-2022 走看看