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

原创 2016年05月31日 14:11:06

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);
		}
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

使用SAX解析将xml的文件内容结构保存到java对象中

在Java使用Sax解析xml文件中,我们介绍了如何用SAX解析xml文件,接下来我们继续学习如何将一个xml文件的内容结构保存到一个java实例对象中 一、xml文件如下 计...

Xml解析之Sax解析(传入xml即可得到实体类集合)

[toc] 之前想写一个JAXB解析xml与实体类转换的,但是发现JAXB有一定的局限性,有时,在解析非标准xml中的属性值时,不能够获取到其中的值,很奇怪的是,JAXB是jdk中自带的API,竟然...

SAX解析XML

SAX解析是一种与PULL解析器类似的XML解析的方法,不同的是,使用PULL解析需要程序员自己获取产生的事件做相应的操作。SAX解析的特点是逐行扫描文档,一边扫描一边解析,这种方式比起一次性将整个X...

java中使用sax解析xml,以实体类集合的方式接受xml解析的值

1.先编写要解析的xml文件: Allen 男 20 namy 女 18 lufy 男 19 2.编写要转换的实体类:PersonBean package com.xml.uti...

解析XML时DTD的处理--解析时忽略,生成XML文件时加上

一、解析XML文件时,遇到DTD的定义要怎么办?     下面这段代码是ibatis配置文件,用w3c Dom(其实任意一种解析方式都是这样)都会从http://www.ibatis.com/dtd/...

XML解析之SAX解析过程代码详解

上一篇谢了解析原理和过程,这里应用代码直观认识这个原理: 新建Demo1类: import java.io.File; import javax.xml.parsers.SAXParser; ...

Java解析XML文档SAX入门案例

Java解析XML文档DOM入门案例 1 ² 面试题: 如何设置JVM运行内存的大小? 1 1.为什么会出现sax技术 2 2.sax技术可以在不加载全部 xml 文件时,就可以解析xml文档,...

Java SAX解析Xml文档Demo

  • 2017年08月18日 14:12
  • 13KB
  • 下载

用DOM SAX JDom dom4j 对xml文档解析实例

  • 2013年07月28日 17:05
  • 15.13MB
  • 下载

cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)

今天是个好日子,心想的事儿都能成,明天是个好日子,打开了家门儿迎春风。。。 恩,听着歌写文档生活就是这么享受。 今天以前的邻居大神突然在qq上赞了我一下,这让我异常激动啊。。这还要从前前前几天说起,那...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象
举报原因:
原因补充:

(最多只允许输入30个字)