SAX解析XML文件的簡單應用

SAX順序讀取XMl文件時,並非一次性將XML文件讀到內存中去,而是一段一段的讀到內存中。SAX的解析器是基於事件的模型,解析XML文件時會觸發一系列事件。SAX佔用內存小、處理靈活,對於手機端的開發比較適合。
如果需要對XMl文件反覆操作,並且做修改等動作,SAX就不適合了。

案例:簡單讀取XMl文件中的內容

1、  通過繼承DefaultHandler,並重寫四個函數即可完成解析操作

public class MyXmlReadHandler extends DefaultHandler{
		private String tagName; 
		private Student student = null;
		private List<Student> lists = null;  
		
		public List<Student> getLists() {
			return lists;
		}

		/**
		 * 讀取XML文件開始(初始化集合對象)
		 */
		@Override 
	    public void startDocument() throws SAXException {  
			lists = new ArrayList<Student>();  
	    }  
	  
		/**
		 * 讀取標籤開始(初始化student對象)
		 */
	    @Override  
	    public void startElement(String uri, String localName, String qName,  
	            Attributes attributes) throws SAXException {  
	        tagName = qName;  
	        if(tagName.equals("student")){  
	            student = new Student();  
	        }  
	    }  
	    
	    /**
	     * 讀取標籤內容(給對象student屬性賦值)
	     * 通過簡單的if-else判斷方式
	     */
	    @Override  
	    public void characters(char[] ch, int start, int length)  
	            throws SAXException {  
	        if (tagName != null) {  
	            String data = new String(ch, start, length);  
	            if (tagName.equals("name")) {  
	                student.setName(data);  
	            }else if (tagName.equals("age")) {  
	                student.setAge(data);  
	            }else if (tagName.equals("sex")) {  
	                student.setSex(data);  
	            }  
	        }  
	    }  
	    
	    /**
	     * 讀取標籤內容結束(給集合對象賦值)
	     * 並注意:tagName = null 
	     */
	    @Override  
	    public void endElement(String uri, String localName, String qName)  
	            throws SAXException {  
	        if(qName.equals("student")){  
	            lists.add(student);  
	        }  
	        tagName = null;  
	    }  
}

2、  調用方法

public class XmlSax {
	
	public static void main(String[] args) throws Exception {
		
		InputStream ins = Thread.currentThread().getContextClassLoader().getResourceAsStream("students.xml");
		MyXmlReadHandler readHandler = new MyXmlReadHandler();   
        SAXParserFactory factory = SAXParserFactory.newInstance();  
        SAXParser sp = factory.newSAXParser();  
        sp.parse(ins, readHandler);  
        ins.close();  
        
        List<Student> lists = readHandler.getLists();
        for (Student person : lists) {
        	System.out.println("--------------");
        	System.out.println("name:"+person.getName());
        	System.out.println("age:"+person.getAge());
        	System.out.println("sex:"+person.getSex());
		}
	        
	}
}

3、  XML文件

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student id='0001'>
		<name>stu01</name>
		<age>20</age>
		<sex>男</sex>
	</student>
	<student id='0002'>
		<name>stu02</name>
		<age>22</age>
		<sex>女</sex>
	</student>
</students>

4、  執行結果


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章