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...startElementuri: localName: books qName: books atts: nullstartElementuri: localName: book qName: book atts: IdstartElementuri: localName: name qName: name atts: nullendElementnamespaceURI: localName: name qName: namestartElementuri: localName: title qName: title atts: nullendElementnamespaceURI: localName: title qName: titlestartElementuri: localName: price qName: price atts: nullendElementnamespaceURI: localName: price qName: priceendElementnamespaceURI: localName: book qName: bookstartElementuri: localName: book qName: book atts: IdstartElementuri: localName: name qName: name atts: nullendElementnamespaceURI: localName: name qName: namestartElementuri: localName: title qName: title atts: nullendElementnamespaceURI: localName: title qName: titlestartElementuri: localName: price qName: price atts: nullendElementnamespaceURI: localName: price qName: priceendElementnamespaceURI: localName: book qName: bookstartElementuri: localName: book qName: book atts: IdstartElementuri: localName: name qName: name atts: nullendElementnamespaceURI: localName: name qName: namestartElementuri: localName: title qName: title atts: nullendElementnamespaceURI: localName: title qName: titlestartElementuri: localName: price qName: price atts: nullendElementnamespaceURI: localName: price qName: priceendElementnamespaceURI: localName: book qName: bookendElementnamespaceURI: localName: books qName: booksEnd书名:西瓜 标题:西瓜不用钱 价格:20书名:冬瓜 标题:冬瓜不用钱 价格:30书名:南瓜 标题:南瓜不用钱 价格:40
分享:
崇尚极简,热爱技术,喜欢唱歌,热衷旅行,爱好电子产品的一介码农。
联系QQ:58742094
联系电话:
工作邮箱:
当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!
人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。
Copyright 2015- 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号
免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。