`
lemonhou
  • 浏览: 5795 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

XML文件的SAX解析

 
阅读更多

    SAX解析适合用于解析较大的文件,它不需要完全加载文件,而是边加载边解析,这样当XML文件过大时就不容易导致溢出,但是sax解析的缺点不能对文件再进行操作。XML的DOM解析方式是需要把文件加载完全才进行解析,所以DOM适于解析小文件。

XML文件:

<?xml version="1.0" encoding="UTF-8" ?>
<student>
       <stu name="小红">
            <cla>二班</cla>
            <sex>女</sex>
            <job>学生</job>
       </stu>
       <teacher name="张三">
             <cla>二班</cla>
             <sex>女</sex>
             <job>老师</job>
        </teacher>

</student>

 sax解析代码如下:

package SAX解析;

import java.io.File;

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

public class SAXDemo {
   public static void main(String[] args) throws Exception {
	
    File f=new File("C:\\Users\\chenshao\\Desktop\\dreamfly\\exercise\\xmlcode\\student.xml");
	//创建解析器工厂对象
	SAXParserFactory factory=SAXParserFactory.newInstance();
	//创建Sax解析器对象
	SAXParser sax=factory.newSAXParser();
	//事件处理
	MyDefaultHandler handler=new MyDefaultHandler();
	//解析
	sax.parse(f,handler);
   }
}

 

package SAX解析;

import java.util.ArrayList;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyDefaultHandler extends DefaultHandler{
    //创建动态数组,装XML内容
	ArrayList<student> arraylist;
	student stu,teacher;
	String strvalue;
	
	
    public void startDocument() throws SAXException {
    	//把XML内容装进数组中
    	 arraylist=new ArrayList<student>();
    }
      @Override
    public void startElement(String uri, String localName, String qName,
    		Attributes attributes) throws SAXException {
    	  if(qName.equals("stu")){
    		  stu=new student();
    		  String stuv=attributes.getValue("name");
    		  stu.name =stuv;
    	  }
    	  if(qName.equals("teacher")){
    		  stu=new student();
    		  String stuv2=attributes.getValue("name");
    		  stu.name =stuv2;
    	  }
    }
      @Override
    public void endDocument() throws SAXException {
            for(int i=0;i<arraylist.size();i++){
            	student str=arraylist.get(i);
            	System.out.println(str);
            }
    }
      @Override
    public void endElement(String uri, String localName, String qName)
    		throws SAXException {
    	 if(qName.equals("cla")){
    		  stu.cla=strvalue;
    	  }
    	  if(qName.equals("sex")){
    		  stu.sex=strvalue;
    	  }
    	  if(qName.equals("sex")){
    		  stu.sex=strvalue;
    	  }
    	  if(qName.equals("sex")){
    		  stu.sex=strvalue;
    	  }
    	  if(qName.equals("job")){
    		  stu.job=strvalue;
    	  }
    	  if(qName.equals("stu")){
    		 arraylist.add(stu);
    		 
    	  }
    	  if(qName.equals("teacher")){
    		  arraylist.add(stu);
    	  }
    }
      @Override
    public void characters(char[] ch, int start, int length)
    		throws SAXException {
  		strvalue=new String(ch,start,length);

    }
}

 

package SAX解析;

public class student {
   String name;
   String cla;
   String sex;
   String job;
   public String toString(){
	   return "name"+name+"cla"+cla+"sex"+sex+"job"+job;
   }
}

解析结果:

name小红cla二班sex女job学生

name张三cla二班sex女job老师

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics