java xml文件解析初涉

通過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();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章