SAX解析xml文件

来源:互联网 发布:域名的注册费用 编辑:程序博客网 时间:2024/04/28 12:08

SAX解析xml文件,将解析出来的结果放到一个bean中,再将所有的baen放到list列表中

例子程序的xml文件为:

<?xml version="1.0" encoding="UTF-8"?><书架>   <书>        <书名>海的女儿</书名>        <作者>安徒生</作者>        <售价>50.0元</售价>   </书>   <书>        <书名>卖火柴的小女孩</书名>        <作者>安徒生</作者>        <售价>28.0元</售价>   </书></书架>


需要一个book类,存放书的具体信息(书名,作者,售价)为:

package com.flower.parsexml;public class Book {private String name;private String author;private String price;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 getPrice() {return price;}public void setPrice(String price) {this.price = price;}}


下面开始解析,代码如下:

package com.flower.parsexml;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.Attributes;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;public class SAXparse {@SuppressWarnings("unchecked")public static void main(String[] args) throws ParserConfigurationException,SAXException, IOException {// 创建解析工厂SAXParserFactory factory = SAXParserFactory.newInstance();// 创建解析器SAXParser parser = factory.newSAXParser();// 得到读取器XMLReader reader = parser.getXMLReader();// 设置内容处理器BeanListHandler handler = new BeanListHandler();reader.setContentHandler(handler);// 读取xml文档reader.parse("src/books.xml");ArrayList list = handler.getBooks();Book book;for(int i = 0; i < list.size(); i++) {book = new Book();book = (Book) list.get(i);System.out.println(book.getName() + book.getAuthor() + book.getPrice());}}}class BeanListHandler extends DefaultHandler {//将读取的内容存放到一个book对象中,存放到list集合中ArrayList<Book> list = new ArrayList<Book>();private String currentTag;private Book book;@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {currentTag = qName;if("书".equals(currentTag)) {book = new Book();}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if("书名".equals(currentTag)) {String name = new String(ch,start,length);book.setName(name);}if("作者".equals(currentTag)) {String author = new String(ch,start,length);book.setAuthor(author);}if("售价".equals(currentTag)) {String price = new String(ch,start,length);book.setPrice(price);}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {if("书".equals(qName)) {list.add(book);book = null;}currentTag = null;}public ArrayList<Book> getBooks() {return list;}}


 

运行结果为:

海的女儿安徒生50.0元卖火柴的小女孩安徒生28.0元


 

原创粉丝点击