demo1类:
import java.io.file;
import java.util.list;
import javax.xml.parsers.saxparser;
import javax.xml.parsers.saxparserfactory;
/**
* 使用sax解析把 xml文档封装成对象
* @author apple
*
*/
public class demo3 {
public static void main(string[] args)throws exception {
saxparser parser = saxparserfactory.newinstance().newsaxparser();
mydefaulthandler3 handler = new mydefaulthandler3();
parser.parse(new file("./src/contact.xml"), handler);
list<contact> list = handler.getlist();
for (contact contact : list) {
system.out.println(contact);
}
}
}
mydefaulthandler3类:
import java.util.arraylist;
import java.util.list;
import org.xml.sax.attributes;
import org.xml.sax.saxexception;
import org.xml.sax.helpers.defaulthandler;
/**
* sax处理程序
* @author apple
*
*/
public class mydefaulthandler3 extends defaulthandler {
//存储所有联系人对象
private list<contact> list = new arraylist<contact>();
public list<contact> getlist(){
return list;
}
//保存一个联系人信息
private contact contact;
/**
* 思路:
* 1)创建contact对象
* 2)把每个contact标签内容存入到contact对象
* 3)把contact对象放入list中
*/
//用于临时存储当前读到的标签名
private string curtag;//用于方法跨度使用变量。
@override
public void startelement(string uri, string localname, string qname,
attributes attributes) throws saxexception {
curtag = qname;
//读取到contact的开始标签创建contact对象,这里说明了什么时候创建content对象最合适。
if("contact".equals(qname)){
contact = new contact();
//设置id值
contact.setid(attributes.getvalue("id"));//根据指定名字获取id值
}
}
@override
public void characters(char[] ch, int start, int length)
throws saxexception {
//当前文本内容
string content = new string(ch,start,length);//string类构造方法获取到当前文本的额内容。
if("name".equals(curtag)){
contact.setname(content);
}
if("age".equals(curtag)){
contact.setage(content);
}
if("phone".equals(curtag)){
contact.setphone(content);
}
if("email".equals(curtag)){
contact.setemail(content);
}
if("qq".equals(curtag)){
contact.setqq(content);
}
}
@override
public void endelement(string uri, string localname, string qname)
throws saxexception {
//结束标签后就设置null。这里设置为null很重要。设置空是为了避免空格换行设置到对象的属性中,空格换行进去了就把原来放进去的数据覆盖掉。
curtag = null;
//读到contact的结束标签把content对象放入list中
if("contact".equals(qname)){
list.add(contact);
}
}
}
以上就是xml解析之sax解析案例(二)使用sax解析把 xml文档封装成对象的内容。