您的位置:首页 > 其它

XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象

2016-05-31 14:11 387 查看
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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: