簡述:
sax解析為事件驅動,我們通過繼承DefaultHandler這個類,覆寫其中的三個方法,startElement(),endElement(),character(),這三個方法,會随着sax解析自動執行,例如startElement()方法,解析到開始标簽時,會自動啟動。
xml檔案如下:
(p1.xml)
<?xml version="1.0" encoding="UTF-8"?>
<person >
<p1>
<name>AAA</name>
<age>20</age>
</p1>
<p1>
<name>BBB</name>
<age>99</age>
</p1>
</person>
java代碼
MyDefault1類:把整個XML檔案輸出到螢幕
Mydefault2類:擷取全部name标簽的值
package xxy.testJaxp.sax;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
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;
/**
* @author 許湘揚 2017-2-21
* @說明 使用jaxp對xml進行進行sax解析
*/
public class testJaxp
{
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException
{
//1、建立解析工廠
SAXParserFactory saxParseFactory=SAXParserFactory.newInstance();
//2、建立解析器
SAXParser saxParser=saxParseFactory.newSAXParser();
//3、執行parse方法
saxParser.parse("src/p1.xml", new MyDefault1());
saxParser.parse("src/p1.xml", new Mydefault2());
}
}
/*
* 繼承DefaultHandler類,來實作xml檔案的輸出到螢幕
*/
class MyDefault1 extends org.xml.sax.helpers.DefaultHandler
{
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
System.out.print("<"+qName+">");
}
public void characters(char[] ch, int start, int length)
throws SAXException
{
System.out.print(new String(ch,start,length));
}
public void endElement(String uri, String localName, String qName)
throws SAXException
{
System.out.print("</"+qName+">");
}
}
/*
* 繼承DefaultHandler類,來實作獲得所有name元素的值
*/
class Mydefault2 extends DefaultHandler
{
//判斷位,保證隻輸出name标簽的值
boolean flag=false;
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
if (qName.equals("name"))
flag=true;
}
public void characters(char[] ch, int start, int length)
throws SAXException
{
if (flag==true)
System.out.println(new String(ch,start,length));
}
public void endElement(String uri, String localName, String qName)
throws SAXException
{
if (qName.equals("name"))
flag=false;
}
}