books.XML文件:

书籍book.java实体类:

public class Book {

private String id;

private String name;

private String price;

private String author;

private String year;

private String language;

public String getLanguage() {

return language;

}

public void setLanguage(String language) {

this.language = language;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPrice() {

return price;

}

public void setPrice(String price) {

this.price = price;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public String getYear() {

return year;

}

public void setYear(String year) {

this.year = year;

}

}

SAXPaserHandler继承DefaultHandler类,实现对XML文件的解析:

import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.xml.sax.model.Book;

public class SAXPaserHandler extends DefaultHandler {
    int bookIndex=0;
    String str;
    Book book;
    ArrayList<Book> bookList = new ArrayList<Book>();
    public ArrayList<Book> getBookList() {
        return bookList;
    }
    /*
     * 用来解析XML文件元素的
     */
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        //调用DefaultHandler类的startElement方法
        super.startElement(uri, localName, qName, attributes);
        //开始解析book元素的属性
        if(qName.equals("book")){
            bookIndex++;
            book = new Book();
            //已知book元素下的属性名称,根据属性名称获取属性值
    //  System.out.println("book的属性值是:"+attributes.getValue("id"));
            //不知book元素下的属性名称,如何获取属性值?下面就是
            for(int i=0;i<attributes.getLength();i++){
                System.out.println("开始遍历第"+bookIndex+"本书的第"+(i+1)+"个属性名是:"+attributes.getQName(i)+
                        "--------属性值是:"+attributes.getValue(i));
                if(attributes.getQName(i).equals("id"))
                    book.setId(attributes.getValue(qName));
            }
        }else if(!qName.equals("book")&&!qName.equals("bookstore")){
            System.out.print("节点名是:"+qName+"----");
        }
    }
    
    /*
     * 获取节点值
     */
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        super.characters(ch, start, length);
        str=new String(ch,start,length);
        if(!str.trim().equals(""))
            System.out.println("节点值是:"+str);
    }
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        //调用DefaultHandler类的endElement方法
        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(str);
        }else if(qName.equals("price")){
            book.setPrice(str);
        }else if(qName.equals("author")){
            book.setAuthor(str);
        }else if(qName.equals("year")){
            book.setYear(str);
        }else if(qName.equals("language")){
            book.setLanguage(str);
        }
    }
    /*
     * 用来标志解析开始
     */
    @Override
    public void startDocument() throws SAXException {
        System.out.println("SAX解析开始");
        super.startDocument();
    }
    /*
     * 用来标志解析结束
     */
    @Override
    public void endDocument() throws SAXException {
        System.out.println("SAX解析结束");
        super.endDocument();
    }
}

SAXTest.java测试类:
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import com.xml.sax.handler.SAXPaserHandler;
import com.xml.sax.model.Book;

public class SAXTest {
    public static void main(String[] args) {
        //获取SAXParserFactory实例
        SAXParserFactory spf = SAXParserFactory.newInstance();
        //通过spf获取SAXParser的实例
        try {
            SAXParser paser= spf.newSAXParser();
            SAXPaserHandler sp=new SAXPaserHandler();
            paser.parse("books.xml", sp);
            System.out.println("##########共有"+sp.getBookList().size()+"本书!!!");
           //可以遍历输出每本书的属性值

    for(Book book:sp.getBookList()){
                System.out.println("书的ID是:"+book.getId());
                System.out.println("书的书名是:"+book.getName());
                System.out.println("书的价格是:"+book.getPrice());
                System.out.println("书的作者是:"+book.getAuthor());
                System.out.println("书的出版日期是:"+book.getYear());
                System.out.println("书的语言是:"+book.getLanguage());
                System.out.println("***************本书遍历结束***************");
            }
        } 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();
        }
    }
}

SAX方式解析XML文件实例的更多相关文章

  1. Java&Xml教程(五)使用SAX方式解析XML文件

    Java SAX解析机制为我们提供了一系列的API来处理XML文件,SAX解析和DOM解析方式不太一样,它并不是將XML文件内容一次性全部加载,而是连续的部分加载. javax.xml.parsers ...

  2. 用JAXP的SAX方式解析XML文件

    简单用JAXP的SAX方式(事件驱动)解析XML文件: 文件(1.XML) <?xml version="1.0" encoding="UTF-8" st ...

  3. DOM方式解析XML文件实例

    books.XML文件: <?xml version="1.0" encoding="utf-8"?><bookstore>    &l ...

  4. 使用SAX方式解析XML文件

    package com.pingyijinren.test; import android.util.Log; import org.xml.sax.Attributes; import org.xm ...

  5. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  6. (四)SAX方式解析XML数据

    SAX方式解析XML数据 ​文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 一.XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程 ...

  7. 用JAXP的dom方式解析XML文件

    用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...

  8. 在iOS 开发中用GDataXML(DOM方式)解析xml文件

    因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我 ...

  9. Java眼中的XML--文件读取--2 应用SAX方式解析XML

    1.获取一个SAXParserFactory的实例.2.通过factory获取SAXParser实例.  3.新建一个包和继承自DefaultHandler的类.  因为SAX遍历方式,比如便利一个节 ...

随机推荐

  1. 继承BaseAdapter实现Filterable的adapter类完整示例

    转载:http://www.lai18.com/content/1631130.html 目标:自定义ListView项布局通常需要自己实现Adapter,并通过搜索关键字筛选部分数据.且关键字变长变 ...

  2. NGUI学习笔记(四):动态加载UI和NGUI事件

    动态加载UI 我们进入一个场景后,如果将这个场景所有可能用到的UI都直接放在场景中做好,由于要在进入场景时就部署好所有的UI对象,那么当UI对象较多时会碰到的问题是:1.初始化场景会产生非常明显的卡顿 ...

  3. fastica matlab 转载

    FastICA工具箱1 http://chunqiu.blog.ustc.edu.cn/?p=68#comment-3512 FastICA代码网址如下:http://research.ics.aal ...

  4. 手把手教你去ECSHOP版权 powered by ecshop

      各位朋友大家好,欢迎来到ecshop开发中心系列视频教程:ecshop去版权.去版权是一种很常见的问题,有很多客户提到ECSHOP如何去版权?怎样去得干净.去得彻底?今天,ECSHOP开发中心手把 ...

  5. lua string 库

    --lua中字符串索引从前往后是1,2,……,从后往前是-1,-2……. --string库中所有的function都不会直接操作字符串,只返回一个结果. ---------------------- ...

  6. 【转】linux下cppunit的安装

    以下内容来自:http://www.51testing.com/html/51/279751-170160.html 1. 安装 cppunit的下载地址为:http://sourceforge.ne ...

  7. C++ 变量初始化规则

    1.定义变量的时候,如果没有初始化,它的值是什么呢? 它的值取决于变量的类型和变量定义的位置. 2.考虑基本类型的变量,定义时没有初始化.如果定义在方法外部,初始化为0,如果定义在方法内部,不被初始化 ...

  8. 数据库中DDL、DML、DCL和TCP概念

    1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...

  9. PAT 1009

    1009. Product of Polynomials (25) This time, you are supposed to find A*B where A and B are two poly ...

  10. [转]使用Oracle SQL Developer连接数据库并创建用户

    本文转自:http://blog.csdn.net/xw13106209/article/details/6594738 1.使用sys账户创建数据库连接 安装Oracle 11g会自带一个叫做SQL ...