Mp3Player(9) Mp3ListContentHandler、DefaultHandler、SAXParserFactory
-
//Mp3ListContentHandler.java
-
package com.lwb.xml;
-
-
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.Attributes;
-
import org.xml.sax.InputSource;
-
import org.xml.sax.SAXException;
-
import org.xml.sax.XMLReader;
-
import org.xml.sax.helpers.DefaultHandler;
-
-
import com.lwb.model.Mp3Info;
-
-
/*SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动,
-
* 它不需要解析完整个文档,而是按照内容顺序 看文档某个部分是否符合xml语法,
-
* 如果符合就触发相应的事件,所谓的事件就是些回调方法(callback),
-
* 这些方法 定义在ContentHandler中,下面是其主要方法:
-
* startDocument:当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作
-
* startElement: (String namespaceURI,String localName,String qName,Attributes atts)当遇开始标签的时候就会触发这个方法。
-
* endElement(String uri,String localName,String name):当遇到结束标签时触发这个事件,调用此法可以做些善后工作。
-
* charachers(char [] ch,int start,int length):当遇到xml内容时触发这个方法,用new String(ch,start,length)可以接受内容。
-
*具体的见:http://blog.csdn.net/sjf0115/article/details/7222591
-
*/
-
//定义一个mp3内容处理器 使用Adater处理器
-
public class Mp3ListContentHandler extends DefaultHandler{
-
-
private List<Mp3Info> infos = null; //表resource.xml中所有的mp3信息。
-
private Mp3Info mp3Info = null; //一个mp3信息
-
private String tagName = null; //??????
-
-
//获取歌曲列表
-
public List<Mp3Info> getInfos() {
-
return infos;
-
}
-
-
//歌曲列表 设置
-
public void setInfos(List<Mp3Info> infos) {
-
this.infos = infos;
-
}
-
-
//构造函数,在创建的时候传进来
-
public Mp3ListContentHandler(List<Mp3Info> infos) {
-
super();
-
this.infos = infos;
-
}
-
-
-
/*characters(char[] ch, int start, int length)
-
* 当遇到xml内容时触发这个方法,用new String(ch,start,length)可以接受内容。
-
*/
-
@Override
-
public void characters(char[] ch, int start, int length)
-
throws SAXException {
-
String temp = new String(ch,start,length);
-
if(tagName.equals("id")){
-
mp3Info.setId(temp);
-
}
-
else if(tagName.equals("mp3.name")){
-
mp3Info.setMp3Name(temp);
-
}
-
else if(tagName.equals("mp3.size")){
-
mp3Info.setMp3Size(temp);
-
}
-
else if(tagName.equals("lrc.name")){
-
mp3Info.setLrcName(temp);
-
}
-
else if(tagName.equals("lrc.size")){
-
mp3Info.setLrcSize(temp);
-
}
-
super.characters(ch, start, length);
-
}
-
-
/*endDocument()
-
* */
-
@Override
-
public void endDocument() throws SAXException {
-
super.endDocument();
-
}
-
-
/*endElement(String uri,String localName,String name):
-
* 当遇到结束标签时触发这个事件,调用此法可以做些善后工作。*/
-
@Override
-
public void endElement(String uri, String localName, String qName)
-
throws SAXException {
-
if(qName.equals("resource"))//表一个MP3标记信息的结束 ??????
-
{
-
infos.add(mp3Info);//表吧mp3Info添加到infos表中
-
}
-
tagName="";
-
super.endElement(uri, localName, qName);
-
}
-
-
/*startDocument:当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作*/
-
@Override
-
public void startDocument() throws SAXException {
-
super.startDocument();
-
}
-
-
/*startElement: (String namespaceURI,String localName,String qName,Attributes atts)
-
* 当遇开始标签的时候就会触发这个方法。
-
*/
-
@Override
-
public void startElement(String uri, String localName, String qName,
-
Attributes attributes) throws SAXException {
-
this.tagName = localName;//????????
-
if(tagName.equals("resource")){//表一个MP3标记信息的开始
-
mp3Info = new Mp3Info();
-
}
-
super.startElement(uri, localName, qName, attributes);
-
}
-
}
阅读(512) | 评论(0) | 转发(0) |