java xml文件解析初涉

版权声明:版权所有@万星明 https://blog.csdn.net/qq_19533277/article/details/83343261

通过SAX解析xml文件,由四部分组成,xml文件,文件存储类,解析类,处理器类。

以下为xml文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE students[
<!ELEMENT students (student+)>
<!ELEMENT student (sname,sage,ssex)>
<!ELEMENT sname (#PCDATA) >
<!ELEMENT sage (#PCDATA) >
<!ELEMENT ssex (#PCDATA) >
]>
<students>
	<student>
		<sname>万星明</sname>
		<sage>23</sage>
		<ssex>男</ssex>
	</student>
	<student>
		<sname>卢玉枭</sname>
		<sage>25</sage>
		<ssex>女</ssex>
	</student>
	<student>
		<sname>李前飞</sname>
		<sage>24</sage>
		<ssex>女</ssex>
	</student>
</students>

以下是学生类,用于创建学生对象,存储从xml文件中读取的对象数据

/** 
* @author  万星明
* @version 创建时间:2018年10月24日 上午10:51:17 
* 学生信息类
*/
public class Student {
	private String name;
	private Integer age;
	private String sex;
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
}

以下是解析类,通过处理器,解析xml文件,将数据装入对象中,然后将对象放入集合

import java.util.List;

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

/** 
* @author  万星明
* @version 创建时间:2018年10月24日 上午10:54:02 
* 类说明 

*/
public class SaxParser {
	public static void main(String[] args) throws Exception {
		
		//创建sax解析器工厂对象
		SAXParserFactory factory = SAXParserFactory.newInstance();
		//通过sax解析器工厂对象创建sax解析器对象
		SAXParser sp = factory.newSAXParser();
		//创建处理器对象
		StudentHandler sh = new StudentHandler();
		//用sax解析器解析xml文档,并按处理器处理方式来解析内容
		sp.parse("XML//Students.xml",sh);
		//接收解析结果
		List<Student> stuList=sh.stuList;
		System.out.println("姓名\t年龄\t性别");
		for (Student s : stuList) {
			System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getSex());
		}
	
	}
}

以下是xml处理器

import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/** 
* @author  万星明
* @version 创建时间:2018年10月24日 上午11:09:34 
* 学生xml处理类
*/
public class StudentHandler extends	DefaultHandler {
	
	//存储解析出的Student对象的集合
	public List<Student> stuList = null;
	//声明一个变量,存储每次解析的标签名
	public String lable;
	//声明student变量
	public Student stu;
	
	
	//重写开始解析文档的方法
	@Override
	public void startDocument() throws SAXException {
		stuList = new ArrayList<>();
//			super.startDocument();
	}
	
	//重写开始解析标签的方法
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		//解析到student标签时,创建Student实例对象
		lable = qName;
		if(lable.equals("student")) {
			stu = new Student();
		}
//		super.startElement(uri, localName, qName, attributes);
	}
	
	//重写解析标签内容的方法
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		
		String data = new String(ch,start,length);
		if(lable.equals("sname")) {
			stu.setName(data);
		}else if(lable.equals("sage")){
			stu.setAge(Integer.valueOf(data));
		}else if(lable.equals("ssex")) {
			stu.setSex(data);
		}
		
//		super.characters(ch, start, length);
	}
	
	//重写结束解析标签的方法
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		if(qName.equals("student")) {
			stuList.add(stu);
		}
//		super.endElement(uri, localName, qName);
	}
	
	//重写结束解析文档的方法
	@Override
	public void endDocument() throws SAXException {

//		super.endDocument();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_19533277/article/details/83343261
今日推荐