sax 解析xml实例

abc.xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="1">
		<name>张三</name>
		<age>18</age>
	</person >
	<person id="2">
		<name>李四</name>
		<age>19</age>
	</person>
	<person id="3">
		<name>王五</name>
		<age>20</age>
	</person>
	<person id="4">
		<name>赵六</name>
		<age>21</age>
	</person>
</persons>

定义实体类

User.java

package com.zf.pojo;

public class User {
	
	private int userId;
	private String userName ;
	private int userAge;
	public User(){}
	public User(int userId){
		this.userId = userId;
	}
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getUserAge() {
		return userAge;
	}
	public void setUserAge(int userAge) {
		this.userAge = userAge;
	}
	@Override
	public String toString() {
		return "id:" + userId + " ,name:" + userName + " ,age:" + userAge;
	}
}




实现DefaultHandler

package com.zf.test;

import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.zf.pojo.User;

public class SaxParserXMl extends DefaultHandler{

	private List<User> userList = null;			//保存解析出来的User对象

	private User tempUser = null ;
	
	private String currentTag = "";			//当前所在节点名称
	
	//开始解析文档
	@Override
	public void startDocument() throws SAXException {
		userList = new ArrayList<User>();
	}

	//开始元素节点
	/**
	 *@param qName 节点名称
	 *@param attributes 节点所有属性
	 */
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if ("person".equals(qName)) {
			tempUser = new User(Integer.parseInt(attributes.getValue("id")));
			currentTag = "person";
		}else if("name".equals(qName)){
			currentTag = "name";
		}else if("age".equals(qName)){
			currentTag = "age";
		}
	}

	//结束元素节点
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if ("person".equals(qName)) 
			userList.add(tempUser);
		currentTag = "";
	}

	//进入文本节点
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if (currentTag.equals("name")) {
			tempUser.setUserName(new String(ch , start , length));
		}else if(currentTag.equals("age")){
			tempUser.setUserAge(Integer.parseInt(new String(ch , start , length)));
		}
	}
	
	public List<User> getUserList(){
		return userList;
	}


}

开始解析:

	public static void main(String[] args) throws Exception {
		
		SAXParserFactory saxFactory = SAXParserFactory.newInstance();
		SAXParser saxParser = saxFactory.newSAXParser();
		SaxParserXMl spx = new SaxParserXMl();
		saxParser.parse(new File("src/abc.xml"), spx);
		System.out.println(Arrays.toString(spx.getUserList().toArray()));
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值