Java SAX解析操作

最近學習java的XML解析相關,在SAX解析部分,我看到某資料Handler繼承的是DefaultHandler,而我在實際使用中卻發現會報錯,在搜索了一下之後,發現繼承SAXParserHandler可以避免這樣的情況。


…………事實證明 是我導錯包了

import org.xml.sax.helpers.DefaultHandler;


package gz.nuist.b_xax;

import com.sun.org.apache.xml.internal.resolver.readers.SAXParserHandler;

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

/**
 * sax解析事件處理程序(類似於事件的監聽器)
 * @author APPle
 *
 */
public class MyDefaultHandler1 extends SAXParserHandler{
	
	/**
	 * 遇到xml文檔的開始位置觸發此方法
	 */
	@Override
	public void startDocument() {
		System.out.println("MyDefaultHandler1.startDocument()");
	}
	
	
	/**
	 * 遇到每個開始標籤時觸發此方法
	 * @param arg2: 當前讀到的結束標籤名稱
	 */
	@Override
	public void startElement(String arg0, String arg1, String arg2, org.xml.sax.Attributes arg3)
			throws org.xml.sax.SAXException {
		System.out.println("MyDefaultHandler1.startElement()->"+arg2);
	}
	
	/**
	 * 遇到每個結束標籤時觸發此方法
	 * @param arg2: 當前讀到的結束標籤名稱
	 */
	@Override
	public void endElement(String arg0, String arg1, String arg2) throws org.xml.sax.SAXException {
		System.out.println("MyDefaultHandler1.startElement()->"+arg2);
	}
	
	
	
	/**
	 * 遇到文本內容觸發此方法
	 * 如何獲取當前讀到的內容?
	 *   char[]: 表示到目前爲止讀到的文本內容
	 *   start: 表示當前內容的起始位置
	 * 	 length: 表示當前內容的長度
	 */

	@Override
	public void characters(char[] arg0, int arg1, int arg2) throws org.xml.sax.SAXException {
		String content = new String(arg0,arg1,arg2);
		System.out.println("MyDefaultHandler1.characters()->"+content);
	}
	
	
	/**
	 * 遇到xml文檔 的結尾
	 */
	@Override
	public void endDocument() throws org.xml.sax.SAXException {
		System.out.println("MyDefaultHandler1.endDocument()");
	}

	
}



這是main 的測試代碼


package gz.nuist.b_xax;

import java.io.File;

import java.io.File;

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

import org.xml.sax.SAXException;

import com.sun.org.apache.xml.internal.resolver.readers.SAXParserHandler;

/**
 * sax解析入門
 * @author APPle
 *
 */
public class Demo4 {

		public static void main(String[] args) throws Exception, SAXException {
			//1)創建SAXParser解析對象
			SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
			
			//2)解析xml文件
			/**
			 * 參數一: 需要解析的xml文件
			 * 參數二: 指定的DefaultHandler
			 */
			/**
			 * 事件編程模式三要求:
			 *   事件源:xml文件 
			 *   事件:解析到開始標籤(包含屬性),解析到結束標籤,解析文本內容
			 *   監聽器:DefaultHandler
			 */
			//類似於註冊監聽器
			parser.parse(new File("./contant.xml"), new MyDefaultHandler1());
			
		}
}


就是醬紫

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