Chinaunix首页 | 论坛 | 博客
  • 博客访问: 200606
  • 博文数量: 102
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1015
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-05 16:45
文章存档

2014年(73)

2013年(29)

我的朋友

分类: Android平台

2014-04-06 16:58:08

Mp3Player(9)  Mp3ListContentHandler、DefaultHandler、SAXParserFactory

点击(此处)折叠或打开

  1. //Mp3ListContentHandler.java
  2. package com.lwb.xml;

  3. import java.io.StringReader;
  4. import java.util.ArrayList;
  5. import java.util.Iterator;
  6. import java.util.List;

  7. import javax.xml.parsers.SAXParserFactory;

  8. import org.xml.sax.Attributes;
  9. import org.xml.sax.InputSource;
  10. import org.xml.sax.SAXException;
  11. import org.xml.sax.XMLReader;
  12. import org.xml.sax.helpers.DefaultHandler;

  13. import com.lwb.model.Mp3Info;

  14. /*SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动,
  15.  * 它不需要解析完整个文档,而是按照内容顺序 看文档某个部分是否符合xml语法,
  16.  * 如果符合就触发相应的事件,所谓的事件就是些回调方法(callback),
  17.  * 这些方法 定义在ContentHandler中,下面是其主要方法:
  18.  * startDocument:当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作
  19.  * startElement: (String namespaceURI,String localName,String qName,Attributes atts)当遇开始标签的时候就会触发这个方法。
  20.  * endElement(String uri,String localName,String name):当遇到结束标签时触发这个事件,调用此法可以做些善后工作。
  21.  * charachers(char [] ch,int start,int length):当遇到xml内容时触发这个方法,用new String(ch,start,length)可以接受内容。
  22.  *具体的见:http://blog.csdn.net/sjf0115/article/details/7222591
  23.  */
  24. //定义一个mp3内容处理器 使用Adater处理器
  25. public class Mp3ListContentHandler extends DefaultHandler{

  26.     private List<Mp3Info> infos = null; //表resource.xml中所有的mp3信息。
  27.     private Mp3Info mp3Info = null; //一个mp3信息
  28.     private String tagName = null; //??????
  29.     
  30.     //获取歌曲列表
  31.     public List<Mp3Info> getInfos() {
  32.         return infos;
  33.     }

  34.     //歌曲列表 设置
  35.     public void setInfos(List<Mp3Info> infos) {
  36.         this.infos = infos;
  37.     }

  38.     //构造函数,在创建的时候传进来
  39.     public Mp3ListContentHandler(List<Mp3Info> infos) {
  40.         super();
  41.         this.infos = infos;
  42.     }


  43.     /*characters(char[] ch, int start, int length)
  44.      * 当遇到xml内容时触发这个方法,用new String(ch,start,length)可以接受内容。
  45.      */
  46.     @Override
  47.     public void characters(char[] ch, int start, int length)
  48.             throws SAXException {
  49.         String temp = new String(ch,start,length);
  50.         if(tagName.equals("id")){
  51.             mp3Info.setId(temp);
  52.         }
  53.         else if(tagName.equals("mp3.name")){
  54.             mp3Info.setMp3Name(temp);
  55.         }
  56.         else if(tagName.equals("mp3.size")){
  57.             mp3Info.setMp3Size(temp);
  58.         }
  59.         else if(tagName.equals("lrc.name")){
  60.             mp3Info.setLrcName(temp);
  61.         }
  62.         else if(tagName.equals("lrc.size")){
  63.             mp3Info.setLrcSize(temp);
  64.         }        
  65.         super.characters(ch, start, length);
  66.     }

  67.     /*endDocument()
  68.      * */
  69.     @Override
  70.     public void endDocument() throws SAXException {
  71.         super.endDocument();
  72.     }

  73.     /*endElement(String uri,String localName,String name):
  74.      * 当遇到结束标签时触发这个事件,调用此法可以做些善后工作。*/
  75.     @Override
  76.     public void endElement(String uri, String localName, String qName)
  77.             throws SAXException {
  78.         if(qName.equals("resource"))//表一个MP3标记信息的结束 ??????
  79.         {
  80.             infos.add(mp3Info);//表吧mp3Info添加到infos表中
  81.         }
  82.         tagName="";
  83.         super.endElement(uri, localName, qName);
  84.     }

  85.     /*startDocument:当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作*/
  86.     @Override
  87.     public void startDocument() throws SAXException {
  88.         super.startDocument();
  89.     }

  90.     /*startElement: (String namespaceURI,String localName,String qName,Attributes atts)
  91.      * 当遇开始标签的时候就会触发这个方法。
  92.     */
  93.     @Override
  94.     public void startElement(String uri, String localName, String qName,
  95.             Attributes attributes) throws SAXException {        
  96.         this.tagName = localName;//????????
  97.         if(tagName.equals("resource")){//表一个MP3标记信息的开始
  98.             mp3Info = new Mp3Info();
  99.         }
  100.         super.startElement(uri, localName, qName, attributes);
  101.     }
  102. }

阅读(481) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~