SAX解析

原创 2016年08月28日 14:20:24

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;
    }


}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

SAX类解析XML

  • 2016年06月17日 12:03
  • 1.47MB
  • 下载

Java SAX解析Xml文档Demo

  • 2017年08月18日 14:12
  • 13KB
  • 下载

使用SAX解析将xml的文件内容结构保存到java对象中

在Java使用Sax解析xml文件中,我们介绍了如何用SAX解析xml文件,接下来我们继续学习如何将一个xml文件的内容结构保存到一个java实例对象中 一、xml文件如下 计...

sax解析util

  • 2016年03月01日 15:25
  • 4KB
  • 下载

xml sax解析

  • 2016年07月29日 09:38
  • 9KB
  • 下载

详解Java解析XML的四种方法—DOM/SAX/jdom/dom4j

最近在研究XML文件的生成和解析,网上资料很多,当然也参差不齐。写的没错误的通常是单独介绍了1种方法,介绍全的常常运行不起来。         小哆把4种方法汇总了一下,运行验证成功。     ...

XML SAX解析

  • 2014年09月19日 17:41
  • 1.11MB
  • 下载

sax标准解析XML

  • 2013年08月21日 10:13
  • 147KB
  • 下载

android解析XML总结(SAX、Pull、Dom三种方式)

在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull)...

数据sax解析

  • 2014年11月26日 10:55
  • 1008KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SAX解析
举报原因:
原因补充:

(最多只允许输入30个字)