天天看点

【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