用SAX解析xml文件
2011-11-24 22:13
302 查看
先说一下两者的区别:
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 + "]";
}
}
相关文章推荐
- Dom、Sax、Pull解析xml文件
- SAXReader saxReader = new SAXReader();来解析xml文件
- 第一次写-如何用SAX高效解析超大XML文件
- SAX 解析 XML 文件详细解剖及案例
- SAXBuilder解析xml文件内容用于公共参数的校验
- XML文件解析---SAX方法
- Java解析XMl文件之SAX和DOm方法
- Java眼中的XML--文件读取--2 应用SAX方式解析XML
- Android开发--详解SAX解析XML文件
- Java Sax解析xml文件
- XML 文件解析    SAX解析    DOM 解析
- SAX解析xml文件
- xml文件--SAX方式解析xml文件
- Android开发--详解SAX解析XML文件
- SAX解析XML文件
- android之XML文件解析 -- SAX
- Android学习笔记_7_使用 sax 或者 dom 或者 pull 解析XML文件
- Java眼中的XML--文件读取--2 应用SAX方式解析XML
- 采用DOM4J中的SAXReader解析webservice返回的XML文件
- C# XML文件操作总结 SAX DOM 解析