java--SAX解析xml

来源:互联网 发布:unity3d找工作好难 编辑:程序博客网 时间:2024/06/04 20:00

有下面的xml文件,如何解析

<?xml version="1.0" encoding="UTF-8"?><bookstore>    <book id="1">        <name>王小二的妖孽人生</name>        <author>乔治马丁</author>        <year>2014</year>        <price>89</price>    </book>    <book id="2">        <name>安徒生童话</name><year>2004</year>        <price>77</price>        <language>English</language>    </book></bookstore>

首先创建sax相关类

package saxXML;import java.io.IOException;import java.util.ArrayList;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;import sax3.Book;import saxXML2.SaxHandler;public class SaxTest {    public static void main(String[] args) {        SAXParserFactory factory = SAXParserFactory.newInstance();        try {            SAXParser parser = factory.newSAXParser();            SaxHandler handler = new SaxHandler();            parser.parse("booKs.xml", handler);            ArrayList<Book> arrayList=handler.getArrayList();            System.out.println("数组的大小"+arrayList.size());            for (Book book : arrayList) {                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());            }        } catch (ParserConfigurationException | SAXException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

实现DefaultHandler 类

package saxXML2;import java.util.ArrayList;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import sax3.Book;public class SaxHandler extends DefaultHandler {      String valueString="";      Book book=null;      ArrayList<Book> bookList=new ArrayList<Book>();      public ArrayList<Book> getArrayList() {        return bookList;    }@Overridepublic void startDocument() throws SAXException {    // TODO Auto-generated method stub    super.startDocument();    System.out.println("startDocument");}@Override    public void endDocument() throws SAXException {        // TODO Auto-generated method stub        super.endDocument( );        System.out.println("endDocument");    }    @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);            if (qName.equals("book")) {//对于book节点                book=new Book();              for (int i = 0; i < attributes.getLength(); i++) {                System.out.print(attributes.getQName(i)+ "   ");                System.out.println(attributes.getValue(i));                if (attributes.getQName(i).equals("id")) {                    book.setId(attributes.getValue(i));//这里属性值就是id                }            }            }                           //对于其他节点,滤掉--            if (!qName.equals("book")&&!qName.equals("bookstore")) {                System.out.print("(qName)"+qName);            }        }    @Override        public void endElement(String uri, String localName, String qName)                throws SAXException {            // TODO Auto-generated method stub            super.endElement(uri, localName, qName);            //找那两本书的book的结束标记            if (qName.equals("book")) {                System.out.println();                System.out.print("=====遍历一本书结束");                bookList.add(book);                book=null;            }            else if (qName.equals("name")) {               book.setName(valueString);            }            else if(qName.equals("price")) {                book.setPrice(valueString);            }            else if (qName.equals("author")) {                book.setAuthor(valueString);            }            else if (qName.equals("lanuage")) {                 book.setAuthor(valueString);            }            else if (qName.equals("year")) {                book.setYear(valueString);            }               }   @Override    public void characters(char[] ch, int start, int length)            throws SAXException {        // TODO Auto-generated method stub        super.characters(ch, start, length);       valueString=new String(ch,start,length) ;       if (!valueString.trim().equals("")) {        System.out.println("(charactors)"+valueString);      }     }}

书籍类用于存放xml里面对象

package sax3;public class Book { private String id; private String name; private String author; private String year; private String price; private String lanuage;public String getId() {    return id;}public void setId(String string) {    this.id = string;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}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;}public String getPrice() {    return price;}public void setPrice(String price) {    this.price = price;}public String getLanuage() {    return lanuage;}public void setLanuage(String lanuage) {    this.lanuage = lanuage;}}
0 0
原创粉丝点击