使用JAXP对XMl进行sax解析

使用JAXP进行sax解析
        //创建解析工厂
        SAXParserFactory factory=SAXParserFactory.newInstance();
        //得到解析工具
        SAXParser parse=factory.newSAXParser();
        
        //得到读取器
        XMLReader read=parse.getXMLReader();
        //设置内容处理
        read.setContentHandler(new ListHander());
        //5.读取xml内容
        read.parse("src/Demo2.xml");
    }

}
//得到xml中所有的内内容
class ListHander implements ContentHandler{

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

    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
    }

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

    @Override
    public void endPrefixMapping(String prefix) throws SAXException {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void ignorableWhitespace(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void processingInstruction(String target, String data)
            throws SAXException {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void setDocumentLocator(Locator locator) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void skippedEntity(String name) throws SAXException {
        // TODO Auto-generated method stub
    }

    @Override
    public void startDocument() throws SAXException {    
    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes atts) throws SAXException {
            System.out.print("<"+qName);
            for(int i=0;atts!=null&&i<atts.getLength();i++){
                System.out.print(" "+atts.getQName(i) +"="+atts.getValue(i)+" ");
            }
            System.out.print(">");
        
    }

    @Override
    public void startPrefixMapping(String prefix, String uri)
            throws SAXException {
        // TODO Auto-generated method stub
        
    }
    
}

//得到制定的标签名:DefaultHandler实现了ContentHandler接口
class TagValue2 extends DefaultHandler{
    private String needName="书名";
    private String currentName=null;
    private int currentNumber=0;
    private int needNumber=2;
    @Override
    public void startElement(String arg0, String arg1, String qName,
            Attributes arg3) throws SAXException {
        currentName=qName;
        if(currentName.equals(needName)){
            currentNumber++;
        }
    }
    @Override
    public void characters(char[] ch, int arg1, int arg2) throws SAXException {
        System.out.println(currentName);
        if((currentNumber==needNumber)&&(currentName.equals(needName))){
            System.out.println(new String(ch,arg1,arg2));
        }
        
    }

    @Override
    public void endElement(String arg0, String arg1, String arg2)
            throws SAXException {    
    }
    
    
//把xml文档中的每一本书封装到Book对象中,并把多个List对象中,并返回
class T extends DefaultHandler{
    private  ArrayList<Book> list=new ArrayList<Book>();
    private  Book book;
    private String name;
    
    public ArrayList<Book> getList(){
        return list;
    }
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        String str=new String(ch,start,length);
        
        if(("书名").equals(name)){//equals两边的不能换换了出问题
            book.setName(str);
        }
         if(("价钱").equals(name)){
            book.setPrice(str);
        }
        if(("作者").equals(name)){
            book.setAuthor(str);    
        }
        
        str=null;
        
    }
    @Override
    public void endElement(String arg0, String arg1, String qName)
            throws SAXException {
        if(qName.equals("")){
            list.add(book);
            book=null;
        }
        name=null;//注意要置空
            
    }
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes atts) throws SAXException {
        name=qName;
        if(name.equals(""))
            book=new Book();
    }
    

}

 

posted @ 2016-04-26 21:15  戒。  阅读(88)  评论(0编辑  收藏  举报