用SAX解析xml文件

先说一下两者的区别:
1)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。

 2)SAX
    SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。

注意:

当读到一个开始标签的时候,会触发这个方法。uri是命名空间(通过xmlns声明),localName是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。通过atts可以得到所有的属性名和相应的值。注意,如果没有指定Namespace,则qName可能为空,当然不同的SAX实现会有所不同,比如在Android中qName为空,而J2SE中localName为空,所以想要总是得到标签名,就需要检查这两个参数的值了。

 

下面开始SAX解析xml

要解析的xml文件如下 mp3list.xml

<?xml version="1.0" encoding="utf-8"?>
<resource>
<mp3>
  <id>1</id>
  <mp3Name>baby</mp3Name>
  <mp3Url>mp3</mp3Url>
  <mp3Size>3426887</mp3Size>
  <lrcName>baby</lrcName>
  <lrcUrl>lrc</lrcUrl>
  <lrcSize>1699</lrcSize>
</mp3>
<mp3>
  <id>2</id>
  <mp3Name>兰亭序</mp3Name>
  <mp3Url>mp3</mp3Url>
  <mp3Size>4066289</mp3Size>
  <lrcName>兰亭序</lrcName>
  <lrcUrl>lrc</lrcUrl>
  <lrcSize>1812</lrcSize>
</mp3>
</resource>


用SAX解析xml文件主要是实现DefaultHandler接口

package dada.mp3player.xml;


import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;


import javax.xml.parsers.ParserConfigurationException;
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 dada.mp3player.model.Mp3Bean;


/**
 * 
 * <p>Title: Android project </p>
 * <p>Description: 用SAX解析mp3list.xml文件</p>
 * <p>Copyright: Copyright (c) 2011 - 2012</p>
 * <p>Company: dada </p>
 * @author <a href="mailTo:dada360778511@sina.com">dada</a>
 * @version 1.0
 * @history:
 */
public class Mp3ContentHandler extends DefaultHandler{

private String currentTagName;
private List mp3List =null;
private Mp3Bean mp3 = null;
private final String MP3_TAG = "mp3";
@Override
public void startDocument() throws SAXException {
System.out.println("startDocument");
mp3List = new ArrayList();
}

@Override
public void endDocument() throws SAXException {
// mp3List = null;
// mp3 = null;
System.out.println("endDocument");
}


@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
this.currentTagName = localName;
System.out.println("StartEle:localName="+localName+" qName="+qName+" uri="+uri);
if(this.currentTagName.equals(MP3_TAG)){
this.mp3 = new Mp3Bean();
}
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("endEle:localName="+localName+" qName="+qName+" uri="+uri);
if(qName.equals(MP3_TAG)){
mp3List.add(this.mp3);
this.mp3 = null;
}

//注意这里千万注意
this.currentTagName = "";
}

public List getMp3List() {
return this.mp3List;
}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String tempString = new String(ch,start,length);
System.out.println("characters tempString:"+tempString+" currentTagName:"+currentTagName);
if("id".equals(this.currentTagName)){
this.mp3.setId(tempString);
}else if("mp3Name".equals(currentTagName)){
this.mp3.setMp3Name(tempString);
}else if("mp3Url".equals(currentTagName)){
this.mp3.setMp3Url(tempString);
}else if("mp3Size".equals(currentTagName)){
this.mp3.setMp3Size(tempString);
}else if("lrcName".equals(currentTagName)){
this.mp3.setLrcName(tempString);
}else if("lrcUrl".equals(currentTagName)){
this.mp3.setLrcUrl(tempString);
}else if("lrcSize".equals(currentTagName)){
this.mp3.setLrcSize(tempString);
}
}

public static void main(String[] args) {
Mp3ContentHandler handler = new Mp3ContentHandler();
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader();
File xmlFile = new File("E:\\android_dev\\apache-tomcat-6.0.14\\webapps\\mp3player\\resource\\mp3list.xml");
FileInputStream is = new FileInputStream(xmlFile);
xmlReader.setContentHandler(handler);
xmlReader.parse(new InputSource(is));
List mp3List = handler.getMp3List();
for(int i=0;i<handler.getMp3List().size();i++){
System.out.println(mp3List.get(i));
}
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}
}


mp3Bean.java

package dada.mp3player.model;

public class Mp3Bean {
private String id;
private String mp3Name;
private String mp3Url;
private String mp3Size;
private String lrcName;
private String lrcUrl;
private String lrcSize;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMp3Name() {
return mp3Name;
}
public void setMp3Name(String mp3Name) {
this.mp3Name = mp3Name;
}
public String getMp3Url() {
return mp3Url;
}
public void setMp3Url(String mp3Url) {
this.mp3Url = mp3Url;
}
public String getMp3Size() {
return mp3Size;
}
public void setMp3Size(String mp3Size) {
this.mp3Size = mp3Size;
}
public String getLrcName() {
return lrcName;
}
public void setLrcName(String lrcName) {
this.lrcName = lrcName;
}
public String getLrcUrl() {
return lrcUrl;
}
public void setLrcUrl(String lrcUrl) {
this.lrcUrl = lrcUrl;
}
public String getLrcSize() {
return lrcSize;
}
public void setLrcSize(String lrcSize) {
this.lrcSize = lrcSize;
}
@Override
public String toString() {
return "Map3Bean [id=" + id + ", mp3Name=" + mp3Name + ", mp3Url="
+ mp3Url + ", mp3Size=" + mp3Size + ", lrcName=" + lrcName
+ ", lrcUrl=" + lrcUrl + ", lrcSize=" + lrcSize + "]";
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值