第一步:创建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());
}
}
}