天天看點

【xml之SAX解析】

SAX解析基于事件處理器

book.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 書架 SYSTEM "book.dtd">
<書架>
	<書>
		<書名 name="xxx">Java就業教育訓練教程</書名>
		<作者>張孝祥</作者>
		<售價>39.00元</售價>
	</書>
	<書>
		<書名 name="yyy">JavaScript網頁開發</書名>
		<作者>張孝祥</作者>
		<售價>28.00元</售價>
	</書>
</書架>
           

demo.java

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


public class demo {  

    public static void main(String[] args) throws ParserConfigurationException, Exception {  
        // TODO Auto-generated method stub  
        //建立工廠  
        SAXParserFactory factory=SAXParserFactory.newInstance();  
        //解析器  
        SAXParser parser=factory.newSAXParser();  
        //讀取器  
        XMLReader reader=parser.getXMLReader();  
        //内容處理器  
        reader.setContentHandler(new Hander());  
        //讀取xml内容  
        reader.parse("book.xml");  

    }  

    static class Hander extends DefaultHandler  
    {  

        @Override //startElement  
        public void startElement(String uri, String localName, String qName,  
                Attributes attributes) throws SAXException {  
                System.out.println("<"+qName+">");  
                
                //擷取屬性
                for(int i=0;i<attributes.getLength();i++){
                	System.out.println(attributes.getQName(i)+"="+attributes.getValue(i));
                }
        }  

        @Override//endElement  
        public void endElement(String uri, String localName, String qName)  
                throws SAXException {  
                System.out.println("<"+qName+">");  
        }  

        @Override//characters  
        public void characters(char[] ch, int start, int length)  
                throws SAXException {  
             System.out.println(new String(ch,start,length));  
        }  
          
    }  
}  
           

運作結果

<書架>
<書>
<書名>
name=xxx
Java就業教育訓練教程
<書名>
<作者>
張孝祥
<作者>
<售價>
39.00元
<售價>
<書>
<書>
<書名>
JavaScript網頁開發
<書名>
<作者>
張孝祥
<作者>
<售價>
28.00元
<售價>
<書>
<書架>
           

将解析的資料封裝成javabean

public class Book {  

    private String name;  
    private String author;  
    private String price;  

public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public String getAuthor() {  
        return author;  
    }  
    public void setAuthor(String author) {  
        this.author = author;  
    }  
    public String getPrice() {  
        return price;  
    }  
    public void setPrice(String price) {  
        this.price = price;  
    }  


}  
           

解析代碼

import java.util.ArrayList;

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


public class demo3 {  

	public static void main(String[] args) throws ParserConfigurationException, Exception {  
        SAXParserFactory factory=SAXParserFactory.newInstance();  
        SAXParser parser=factory.newSAXParser();  
        XMLReader reader=parser.getXMLReader();  
        Hander hand=new Hander();  
        reader.setContentHandler(hand);  
        reader.parse("book.xml");   
        ArrayList<Book>list=hand.getooks();
        System.out.println(list);  

    }  
}  

class Hander extends DefaultHandler  
{  
    private ArrayList<Book> list=new ArrayList<Book>();  
    private String markName;  
    private Book b;  
   
    @Override  
    public void startElement(String uri, String localName, String qName,  
            Attributes attributes) throws SAXException {  
            if(qName.equals("書"))  
            {  
                b=new Book();  
            }  
            markName=qName;  
    }  

    @Override  
    public void endElement(String uri, String localName, String qName)  
            throws SAXException {  
            if(qName.equals("書"))  
            {  
                list.add(b);  
            }  
    }  

    @Override  
    public void characters(char[] ch, int start, int length)  
            throws SAXException {  
            if(("書名").equals(markName))  
            {  
                b.setName(new String(ch,start,length));  
            }  
            else if(("作者").equals(markName))  
            {  
                b.setAuthor(new String(ch,start,length));  
            }  
            else if(("售價").equals(markName))  
            {  
                b.setPrice(new String(ch,start,length));  
            }  
    }  
      
    public ArrayList<Book> getooks()  
    {  
        return list;  
    }  
}  
           

運作結果

[[email protected], [email protected]]
           
xml