XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象
2016-05-31 14:11
519 查看
Demo1类:
MyDefaultHandler3类:
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); } } }
相关文章推荐
- caffe学习资源汇总(更新中)
- XML文件
- 机器学习之数学知识
- Java字符类型
- 循环日程表问题
- 将本地包添加到maven中央本地库中
- android.os.BinderProxy cannot be cast to cq.cake.servicetest.MyService错误
- PAT 1049. 数列的片段和(20)
- Python操作Excel之xlwt
- Enum
- 解决 bootstrap 在IE8下的兼容问题
- Step 1: 盲打第二天
- Python爬虫
- 错误中学习-this.el is null
- iOS GCD的用法
- eclipse安装gradle插件
- iOS开发笔记--Layer 图层圆角、边框 、底纹其他常用操作
- imageNamed 与 imageWithContentsOfFile的区别
- Python操作Excel之xlrd
- 字符拷贝和字节拷贝文件对比(FileInputStream,FileOutputStream, FileReader, FileWriter)