JAXP 的 sax 解析,邊讀邊解析,只能做查詢的操作,不能做增刪改的操作
1、解析器
2、事件處理器
開始解析xml的文檔,解析器會去調用默認的事件處理器的方法,解析完成後會把內容傳給事件處理器中參數,
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<book>
<name>java</name>
<author>ldh</author>
</book>
TestSax.java ,獲取 xml 文件中 name 節點的值(“java”)
package JAXP.SAX;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class TestSax {
public static void main(String[] args) throws Exception {
run1();
}
public static void run1() throws Exception {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse("src/book.xml", new MyHanlder());
}
}
//事件處理器類
class MyHanlder extends DefaultHandler {
String startTag = "";
String endTag = "";
//當解析到開始節點的時候調用,qName爲節點名,attributes 爲屬性名
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
startTag = qName;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(startTag.equals("name") && !endTag.equals("name")){
System.out.println("name : "+new String(ch,start,length));
}
}
//解析到結束節點的時候調用 aName 爲結束節點名
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
endTag = qName;
}
}