关闭

SAX解析

标签: 实例xml
99人阅读 评论(0) 收藏 举报
分类:

SAX

实例:

public class SAXParse {

    public static void main(String[] args) {
    //获取一个SAXParserFactroy的实例
    SAXParserFactory factory = SAXParserFactory.newInstance();
    //通过factory获取SAXParser实例
    try {
        SAXParser parser = factory.newSAXParser();
        //创建SAXParserHandler对象
        SAXParserHandler handler = new SAXParserHandler();
        parser.parse("books.xml", handler);
        System.out.println("一共有"+handler.getBookList().size()+"本书");
        for(Book book : handler.getBookList()){
            System.out.println("=======start======");
            System.out.println(book.getId());
            System.out.println(book.getName());
            System.out.println(book.getAuthor());
            System.out.println(book.getPrice());
            System.out.println(book.getYear());
            System.out.println(book.getLanguage());
            System.out.println("=======end========");
        }
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
       e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    }

}
public class SAXParserHandler extends DefaultHandler {
    int bookIndex = 0;
    Book book =null;
    String value = null;
    ArrayList<Book> bookList = new ArrayList<Book>(); 
    @Override
    public void characters(char[] ch, int start, int length)
                throws SAXException {
        // TODO Auto-generated method stub
        super.characters(ch, start, length);
         value = new String(ch, start, length);
        if(!value.trim().equals("")){
            System.out.println("节点值:"+value);
        }
    }

    /**
     * 用来遍历xml结束标签
     */
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        super.endElement(uri, localName, qName);
        //判断是否遍历到元素结束标签
        if(qName.equals("book")){
            bookList.add(book);
            book = null;
            System.out.println("========结束遍历第"+ bookIndex +"书本===========");
        }else if(qName.equals("name")){
            book.setName(value);
        }else if(qName.equals("author")){
            book.setAuthor(value);
        }else if(qName.equals("year")){
            book.setYear(value);
        }else if(qName.equals("price")){
            book.setPrice(value);
        }else if(qName.equals("language")){
            book.setLanguage(value);
        }
    }

    /**
     * 用来遍历xml开始标签
     */
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        super.startElement(uri, localName, qName, attributes);
        //qName走到的元素属性
        //开始走到了book属性
        if(qName.equals("book")){
            //创建一个book对象
             book = new Book();
            bookIndex++;
            System.out.println("========开始遍历第"+ bookIndex +"书本==========");
            //已知book元素下的属性名称,根据属性名称获取属性值,
//          String value = attributes.getValue("id");
//          System.out.println("book的属性值是:"+ value);
            //若不知元素下的属性名称和个数
            int num = attributes.getLength();
            for(int i=0; i<num ;i++){
                System.out.println("book元素的第"+(i+1)+"个属性名是:"+
                        attributes.getQName(i) +"--属性值是:"+attributes.getValue(i));
                if(attributes.getQName(i).equals("id")){
                    book.setId(attributes.getValue(i));
                }
            }
        }else if(!qName.equals("book") && !qName.equals("bookstore")) {
            System.out.print("节点名是:"+ qName+"---");
        }
    }
    /**
     * 标志解析开始
     */
    @Override
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.startDocument();
        System.out.println("SAX解析开始");
    }
    /**
     * 标志解析结束
     */
    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument();
        System.out.println("SAX解析结束");
    }

    public ArrayList<Book> getBookList() {
        return bookList;
    }

    public void setBookList(ArrayList<Book> bookList) {
        this.bookList = bookList;
    }


}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5159次
    • 积分:217
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条