MangoCool

XML的解析,SAX的初步学习及简单实例

2015-03-26 13:16:16   作者:MangoCool   来源:MangoCool

book类

public class Book {
    private String name;
    private String title;
    private long price;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public long getPrice() {
        return price;
    }
    public void setPrice(long price) {
        this.price = price;
    }
}


测试类

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class SAXParser extends DefaultHandler {
        private List<Book> books;
        private Book book = null;
        private boolean nb = false;
        private boolean tb = false;
        private boolean pb = false;
        public List<Book> getBooks() {
            return books;
        }
        // Called at start of an XML document
        @Override
        public void startDocument() throws SAXException {
            System.out.println("Start parsing document...");
            books = new ArrayList<Book>();
        }
        // Called at end of an XML document
        @Override
        public void endDocument() throws SAXException {
            System.out.println("End");
        }
        /**
         * Start processing of an element.
         * @param uri  Namespace URI
         * @param localName  The local name, without prefix
         * @param qName  The qualified name, with prefix
         * @param atts  The attributes of the element
         */
        @Override
        public void startElement(String uri, String localName, String qName,
                                 Attributes atts) throws SAXException {
            // Using qualified name because we are not using xmlns prefixes here.
            System.out.println("startElement");
            System.out.println("uri: " + uri + " localName: " + localName + 
" qName: " + qName + " atts: " + atts.getLocalName(0));
            if (qName.equals("book")) {
                book = new Book();
            }
            if (qName.equals("name")) {
                nb = true;
            }
            if (qName.equals("title")) {
                tb = true;
            }
            if (qName.equals("price")) {
                pb = true;
            }
        }
        @Override
        public void endElement(String namespaceURI, String localName, String qName)
                throws SAXException {
            // End of processing current element
            System.out.println("endElement");
            System.out.println("namespaceURI: " + namespaceURI + 
" localName: " + localName + " qName: " + qName);
            if (qName.equals("book")) {
                books.add(book);
                book = null;
            }
            if (qName.equals("name")) {
                nb = false;
            }
            if (qName.equals("title")) {
                tb = false;
            }
            if (qName.equals("price")) {
                pb = false;
            }
        }
        @Override
        public void characters(char[] ch, int start, int length) {
            // Processing character data inside an element
            String attr = new String(ch, start, length);
            if(null != book)
            {
                if (nb) {
                    book.setName(attr);
                }
                if (tb) {
                    book.setTitle(attr);
                }
                if (pb) {
                    book.setPrice(Long.parseLong(attr));
                }
            }
        }
    public static void main(String[] args) throws SAXException, IOException {
        XMLReader parser = XMLReaderFactory.createXMLReader();
        SAXParser bookHandler = new SAXParser();
        parser.setContentHandler(bookHandler);
        parser.parse("D:\\WorkSpace-IDE\\parser\\src\\books.xml");
        for(Book book: bookHandler.getBooks())
        {
            System.out.println("书名:" + book.getName() 
+" 标题:" + book.getTitle() + " 价格:" + book.getPrice());
        }
    }
}


XML

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book Id="1">
        <name>西瓜</name>
        <title>西瓜不用钱</title>
        <price>20</price>
    </book>
    <book Id="2">
        <name>冬瓜</name>
        <title>冬瓜不用钱</title>
        <price>30</price>
    </book>
    <book Id="3">
        <name>南瓜</name>
        <title>南瓜不用钱</title>
        <price>40</price>
    </book>
</books>


输出结果:

Start parsing document...
startElement
uri:  localName: books qName: books atts: null
startElement
uri:  localName: book qName: book atts: Id
startElement
uri:  localName: name qName: name atts: null
endElement
namespaceURI:  localName: name qName: name
startElement
uri:  localName: title qName: title atts: null
endElement
namespaceURI:  localName: title qName: title
startElement
uri:  localName: price qName: price atts: null
endElement
namespaceURI:  localName: price qName: price
endElement
namespaceURI:  localName: book qName: book
startElement
uri:  localName: book qName: book atts: Id
startElement
uri:  localName: name qName: name atts: null
endElement
namespaceURI:  localName: name qName: name
startElement
uri:  localName: title qName: title atts: null
endElement
namespaceURI:  localName: title qName: title
startElement
uri:  localName: price qName: price atts: null
endElement
namespaceURI:  localName: price qName: price
endElement
namespaceURI:  localName: book qName: book
startElement
uri:  localName: book qName: book atts: Id
startElement
uri:  localName: name qName: name atts: null
endElement
namespaceURI:  localName: name qName: name
startElement
uri:  localName: title qName: title atts: null
endElement
namespaceURI:  localName: title qName: title
startElement
uri:  localName: price qName: price atts: null
endElement
namespaceURI:  localName: price qName: price
endElement
namespaceURI:  localName: book qName: book
endElement
namespaceURI:  localName: books qName: books
End
书名:西瓜 标题:西瓜不用钱 价格:20
书名:冬瓜 标题:冬瓜不用钱 价格:30
书名:南瓜 标题:南瓜不用钱 价格:40

标签: java XML 解析 SAX 实例

分享:

上一篇SQL中函数和存储过程的区别

下一篇RESTful框架jersey的初步学习和基于tomcat示例

关于我

崇尚极简,热爱技术,喜欢唱歌,热衷旅行,爱好电子产品的一介码农。

座右铭

当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!

人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。

Copyright 2015- 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号

免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。