SAX解析xml

来源:互联网 发布:js style.display 编辑:程序博客网 时间:2024/06/14 21:24


第一步:创建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文本文件开始加载时执行的方法@Overridepublic void startDocument() throws SAXException { list=new ArrayList<Student>();//文件开始加载时,此时实例化存储学生信息的list集合 }//xml文件加载结束后执行的方法@Overridepublic void endDocument() throws SAXException { }//遇到xml文件中开始标签节点执行的方法@Overridepublic 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文件中结束标签执行的方法@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {xmlTag="";if(qName.equals("student")){list.add(student);} }//用于获取节点中文本内容的方法(实际用是获取文本内容,其实是将整体xml文件所有字符都放进了ch中)@Overridepublic 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 0