SAX解析xml


第一步:创建xml

<?xml version="1.0" encoding="utf-8"?>
<students>
   <student stno="101">
        <stName>张三</stName>
		<age>23</age>
		<address>河北省邯郸市</address>
		<birthday>2000-10-10</birthday>
   </student>
   <student stno="102">
        <stName>王小二</stName>
		<age>26</age>
		<address>辽宁省大连市</address>
		<birthday>2000-10-10</birthday>
   </student>
   <student stno="103">
        <stName>王小三</stName>
		<age>28</age>
		<address>河北张家口</address>
		<birthday>2001-10-10</birthday>
   </student>
   <student stno="104">
        <stName>李小虎</stName>
		<age>25</age>
		<address>河北省邯郸市</address>
		<birthday>2000-10-10</birthday>
   </student>

</students>


第二部:创建实体类

package com.bochy.test;


public class Student {
   private String stno;
   private String stName;
   private Integer age;
   private String address;
   private String birthday;
public String getStName() {
	return stName;
}
public void setStName(String stName) {
	this.stName = stName;
}
public Integer getAge() {
	return age;
}
public void setAge(Integer age) {
	this.age = age;
}
public String getAddress() {
	return address;
}
public void setAddress(String address) {
	this.address = address;
}
public String getBirthday() {
	return birthday;
}
public void setBirthday(String birthday) {
	this.birthday = birthday;
}
public String getStno() {
	return stno;
}
public void setStno(String stno) {
	this.stno = stno;
}
   
}


第三部:创建工具类

package com.bochy.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;

/**
 * 定义解析规则的工具类
 * 采用Sax解析方式解析XML文件
 * */
public class SaxParseUtils extends DefaultHandler{
    //重写相关方法定义解析的规则

	private List<Student> list=null;
	private Student student=null;
	private String xmlTag;//读取到的节点名称
	

	//xml文本文件开始加载时执行的方法
	@Override
	public void startDocument() throws SAXException {
		 list=new ArrayList<Student>();//文件开始加载时,此时实例化存储学生信息的list集合
		 
	}

	//xml文件加载结束后执行的方法
	@Override
	public void endDocument() throws SAXException {
		 
	}

	//遇到xml文件中开始标签节点执行的方法
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		 xmlTag=qName;
		 if(qName.equals("student")){//如果此时遇到的是student标签
			 student=new Student();
			 String stno=attributes.getValue("stno");//获取stno属性值
			// System.out.println("stno:"+stno);
			 student.setStno(stno);//封装学生编号 
		 }
			
	}

	//遇到xml文件中结束标签执行的方法
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		xmlTag="";
		if(qName.equals("student")){
			list.add(student);
		}
		
		 
	}

	//用于获取节点中文本内容的方法(实际用是获取文本内容,其实是将整体xml文件所有字符都放进了ch中)
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		String contentText= String.valueOf(ch, start, length);//获取stName的文本内容
		 if(xmlTag.equals("stName")){	
			student.setStName(contentText);		 
		 }
		 if(xmlTag.equals("age")){
			 student.setAge(Integer.parseInt(contentText));
		 }
		 if(xmlTag.equals("address")){
			 student.setAddress(contentText);
		 }
		 if(xmlTag.equals("birthday")){
			 student.setBirthday(contentText);
		 }
		 
	}
	
	    //获取解析后数据
		public List<Student> getList(){
			
			return this.list;
		}
	
}
第四部:创建测试类

package com.bochy.test;

import java.io.InputStream;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

public class Test {

	/**
	 *  Sax解析
	 * @throws SAXException 
	 * @throws ParserConfigurationException 
	 */
	public static void main(String[] args) throws Exception {
		//通过getClassLoader类加载器,相对路径找资源,此时找src路径下文件内容:
	   InputStream inputStream= Test.class.getClassLoader().getResourceAsStream("com/bochy/test/Students.xml");
       
	   //定义解析工厂
	   SAXParserFactory parserFactory= SAXParserFactory.newInstance();//实例化解析工厂
	   
	   //创建解析器
	   SAXParser saxParser= parserFactory.newSAXParser();
	   
	   //实例化解析规则
	   SaxParseUtils utils=new SaxParseUtils();
	   
	   //解析
	   saxParser.parse(inputStream, utils);
	   
	   List<Student> list=utils.getList();
	   for(int i=0;i<list.size();i++){
		   Student stu=list.get(i);
		   System.out.println(stu.getStno()+":"+stu.getStName()+":"+stu.getAge()+":"+stu.getAddress()+":"+stu.getBirthday());
	   }
	      
	}

}



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值