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文件如下 计...
  • kingsonyoung
  • kingsonyoung
  • 2016年07月22日 15:17
  • 1416

android中使用SAX解析xml(封装)

SAX具体怎么用就不说了,网上搜搜一大片。 第一步:建立公共抽象类BaseHandler package com.dc.handler; import java.io.StringRead...
  • gundumw100
  • gundumw100
  • 2017年04月10日 18:08
  • 238

XML封装与解析

1.XML封装 封装XML格式文件与封装字符串原理差不多,所以封装方法也是大同小异,需要注意的地方就是:1.XML文件中的引号要保留,封装时需要在引号前间反斜杠“\”;2.封装XML文件时,需要将对...
  • haimianjie2012
  • haimianjie2012
  • 2016年08月18日 17:41
  • 746

玩转Java对象和XML相互转换

最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由...
  • songdeitao
  • songdeitao
  • 2013年12月13日 18:39
  • 30163

XML解析 反射成为对象

前一阵做了一个XML解析方法,是使用SAX和XMLPull解析xml为一个类似于Dom节点的对象。解析式成功的但是发现使用起来不是很方便,于是乎对Data增加了 几个获取子节点和属性的方法,修改完后...
  • liulipuo
  • liulipuo
  • 2013年08月16日 13:51
  • 4492

利用Java反射机制完成XML到对象的解析

对于一些小批量的数据,如果采用数据库来存取的话,未免有点大题小作,使用XML文件是个不错的方法,尤其是在一些Web应用中,经常需要缓存一部分数据,如果将这些数据形成XML文件,解析后放入一个Hasht...
  • hingwu
  • hingwu
  • 2007年01月30日 14:40
  • 5860

XML解析为对象

jaxb解析xml为对象例子文章分类:Java编程通过jaxb方式把xml文件映射成bean对象。 1、新建java工程或者web工程都可以。 2、通过精简必须导入jar包          acti...
  • guangzhi0633
  • guangzhi0633
  • 2011年02月20日 20:04
  • 790

使用dom4j 把xml格式解析为对象或者对象集合

android开发里经常会遇到后台传来xml格式的数据,需要我们把它们解析后变成对象或者集合, dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常...
  • lixunjing
  • lixunjing
  • 2015年11月17日 17:39
  • 5931

dom4j将xml解析成对象实验(不断更新)

package com.sx.dom4j; import java.io.File; import java.io.FileOutputStream; import java.util.Ar...
  • sxsboat
  • sxsboat
  • 2011年09月22日 08:09
  • 3200

简单使用SAXReader解析xml数据

之前的工作中,一直是使用json格式的数据进行数据传输。很少会接触到xml格式的数据。不过因为工作需求,在对接其他产品的接口时,偶尔会遇到需要使用xml格式数据的情况,所以,也得学学如何解析xml。不...
  • u011291072
  • u011291072
  • 2016年12月06日 20:13
  • 7722
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象
举报原因:
原因补充:

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