天天看點

jaxp通過sax方式解析xml檔案簡述:xml檔案如下:java代碼

簡述:

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;
    }

}