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


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

XML使用SAX解析与PULL解析的区别

XML使用SAX解析与PULL解析的区别在最近的应用中,经常会用到对XML的解析,但是一直有一个疑问就是SAX解析与PULL解析的区别到底是什么。搜索了相关的问题,整理如下,以便大家查询。我们知道,S...
  • zhliro
  • zhliro
  • 2015年07月10日 15:18
  • 1912

使用SAX方式解析XML

一、创建XML文件 目录结构: 二、新建一个带有main方法的类(SAXTest.java)public class SAXTest { public static void main(S...
  • L_in12
  • L_in12
  • 2016年07月13日 14:17
  • 4909

XML解析(一),SAX解析XML

一、概述 SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOC解析,PULL解析(Android特有),SAX...
  • ydxlt
  • ydxlt
  • 2015年12月05日 09:38
  • 15012

利用Dom,Sax,Pull三种方式解析xml文件

最近找工作,看到许多公司的要求里都写了要会xml解析,所以就把之前的xml解析知识又重新回顾了一下,写个小例子. 解析xml文件常用的几种方式也就dom,sax,pull了,并且面试官经常问到的也是这...
  • qiang_xi
  • qiang_xi
  • 2015年11月29日 20:15
  • 1154

Java解析xml文档之SAX解析

sax解析是一种边读边解析,仅向前读取,不能修改,用来读。sax创建XMLReader三步:SAXParserFactory factory = SAXParserFactory.newInstanc...
  • new___Smile
  • new___Smile
  • 2016年07月16日 00:59
  • 3522

XML解析之SAX解析过程代码详解

上一篇谢了解析原理和过程,这里应用代码直观认识这个原理: 新建Demo1类: import java.io.File; import javax.xml.parsers.SAXParser; ...
  • qq_32059827
  • qq_32059827
  • 2016年05月31日 13:12
  • 942

SAX解析与DOM解析的区别

1.SAX解析(Simple API for XML) SAX解析方式:逐行扫描文档,一遍扫描一遍解析。相比于DOM,SAX可以在解析文档的任意时刻停止解析解析,是一种速度更快,更高效的方法。 优点:...
  • sinat_27170093
  • sinat_27170093
  • 2017年01月07日 13:50
  • 899

SAX解析xml characters方法要注意的问题

前段时间,在写一段解析xml的代码时发现了一个问题。
  • zhutulang
  • zhutulang
  • 2014年07月13日 11:18
  • 7167

理解SAX解析xml的工作原理

摘要: SAX以事件流来解析xml,边读边触发事件函数完成解析,适用于较大XML; DOM加载整个xml文件,最终在内存中创建一个DOM树,适合小XML文件,操作DOM节点比较简便。 dom比较好理解...
  • u011854789
  • u011854789
  • 2017年01月02日 16:17
  • 1002

java中用SAX解析XML

原文地址:http://www.cnblogs.com/allenzheng/archive/2012/12/01/2797196.html 注:考虑到自己程序中表结构比较大,有几百个字段,再加...
  • w2393040183
  • w2393040183
  • 2016年07月15日 11:11
  • 1656
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SAX解析
举报原因:
原因补充:

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