最近學習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());
}
}
就是醬紫