jaxp的sax解析操作

luoyunfan6發表於2018-09-10

xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<person>
    <p1>
        <name>aa</name>
        <age>20</age>
    </p1>
    <p1>
        <name>bb</name>
        <age>30</age>
    </p1>
</person>

java程式碼:

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.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

public class TestSax {

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        /**
         * 1.建立解析器工廠
         * 2.建立解析器
         * 3.執行parse
         * 
         * 4.自己建立一個類,繼承DefaultHandler
         * 5.重寫類裡面的三個方法
         */
        //建立解析器工廠
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        //建立解析器
        SAXParser saxParser = saxParserFactory.newSAXParser();
        //執行parse
        saxParser.parse("src/p1.xml", new MyDefault2());
    }
}
//獲取所有name元素的值
//獲取第一個name元素的值
class MyDefault2 extends DefaultHandler{
    //int idx = 1;  
    boolean flag = false;
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        //當flag是true的時候,表示解析到name元素
        if(flag==true/*&&idx==1*/) {
            System.out.println(new String(ch,start,length));
        }
    }

    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        if("name".equals(qName)) {
            flag = false;
            //idx++;
        }
    }

    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        //判斷qName是否是name元素
        if("name".equals(qName)) {
            flag = true;
        }
    }    
}

class MyDefault1 extends DefaultHandler{
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        System.out.print(new String(ch,start,length));
    }

    
    public void endElement(String uri, String localName, String qName) throws SAXException {
        
        super.endElement(uri, localName, qName);
        System.out.print("<"+qName+">");
    }

    
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        
        super.startElement(uri, localName, qName, attributes);
        System.out.print("<"+qName+">");
    }
    
}
 

相關文章