Pull解析XML

来源:互联网 发布:去网络代理商工作好吗 编辑:程序博客网 时间:2024/06/11 02:43
一使用Pull生成XML文件
1.1生成XML

package com.itheima.parsexml;import java.io.FileOutputStream;import java.io.OutputStream;import org.xmlpull.v1.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;/** *  * @Decription 生成XML使用Pull解析 * @author 刘楠 *  * @time2016-1-23下午6:19:30 */public class SeralizerXML {public static void main(String[] args) throws Exception {String str = "xml/books.xml";serializerXML(str);}/** *  * @param str 文件路径 * @throws Exception */public static void serializerXML(String str) throws Exception {// 输出流OutputStream out = new FileOutputStream(str);// 解析工厂XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 获取序列化对象XmlSerializer serializer = factory.newSerializer();// 设置输出serializer.setOutput(out, "UTF-8");/* * 开始写入方法 定义XML元素 */// 设置文档开始 编码格式,是否为单独存在serializer.startDocument("UTF-8", true);// 设置开始标签根节点,开始标签serializer.startTag(null, "books");/** * 第一个书节点 */// 设置book标签serializer.startTag(null, "book");// 设置book标签属性IDserializer.attribute(null, "id", "001");// 设置子节点名称开始serializer.startTag(null, "bookname");// 设置文本内容serializer.text("Android第一行代码");// 设置子节点名称结束serializer.endTag(null, "bookname");// 设置子节点作者author开始serializer.startTag(null, "author");// 设置文本内容serializer.text("郭霖");// 设置子节点作者author结束serializer.endTag(null, "author");// 设置子节点作者price开始serializer.startTag(null, "price");// 设置文本内容serializer.text("51.50");// 设置子节点作者price结束serializer.endTag(null, "price");// 设置子节点作者publisher开始serializer.startTag(null, "publisher");// 设置文本内容serializer.text("人民邮电出版社");// 设置子节点作者publisher结束serializer.endTag(null, "publisher");// 设置子节点作者publishDate开始serializer.startTag(null, "publishDate");// 设置文本内容serializer.text("2015-06-23");// 设置子节点作者publisher结束serializer.endTag(null, "publishDate");// 设置book结束标签serializer.endTag(null, "book");/** * 第二本书 */// 设置book标签serializer.startTag(null, "book");// 设置book标签属性IDserializer.attribute(null, "id", "007");// 设置子节点名称开始serializer.startTag(null, "bookname");// 设置文本内容serializer.text("疯狂的JAVA讲义");// 设置子节点名称结束serializer.endTag(null, "bookname");// 设置子节点作者author开始serializer.startTag(null, "author");// 设置文本内容serializer.text("李刚");// 设置子节点作者author结束serializer.endTag(null, "author");// 设置子节点作者price开始serializer.startTag(null, "price");// 设置文本内容serializer.text("84.5");// 设置子节点作者price结束serializer.endTag(null, "price");// 设置子节点作者publisher开始serializer.startTag(null, "publisher");// 设置文本内容serializer.text("电子工业出版社");// 设置子节点作者publisher结束serializer.endTag(null, "publisher");// 设置子节点作者publishDate开始serializer.startTag(null, "publishDate");// 设置文本内容serializer.text("2012-12-12");// 设置子节点作者publisher结束serializer.endTag(null, "publishDate");// 设置book结束标签serializer.endTag(null, "book");// 设置根据节点结束标签serializer.endTag(null, "books");// 设置结束serializer.endDocument();out.close();System.out.println("===========写入XML完成============");}}

查看生成的XML

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><books><book id="001"><bookname>Android第一行代码</bookname><author>郭霖</author><price>51.50</price><publisher>人民邮电出版社</publisher><publishDate>2015-06-23</publishDate></book><book id="007"><bookname>疯狂的JAVA讲义</bookname><author>李刚</author><price>84.5</price><publisher>电子工业出版社</publisher><publishDate>2012-12-12</publishDate></book></books>

二解析XML


2.1实体类

package com.itheima.domain;/** * * @Decription 书类描述书的信息 * @author 刘楠 * * @time2016-1-23下午6:19:04 */public class Book {private String id;//编号private String bookname;//书名private String author; //作者private String price; //价格private String  publisher;//出版社private String publishDate;//出版时间/* * getter,setter方法 */public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPublisher() {return publisher;}public void setPublisher(String publisher) {this.publisher = publisher;}public String getBookname() {return bookname;}public void setBookname(String bookname) {this.bookname = bookname;}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;}public String getPublishDate() {return publishDate;}public void setPublishDate(String publishDate) {this.publishDate = publishDate;}/* * toString 方法 */@Overridepublic String toString() {return "Book [id=" + id + ", publisher=" + publisher + ", bookname="+ bookname + ", author=" + author + ", price=" + price+ ", publishDate=" + publishDate + "]";}}

2.2开始解析XML

package com.itheima.parsexml;import java.io.FileInputStream;import java.io.InputStream;import java.util.ArrayList;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserFactory;import com.itheima.domain.Book;/** *  * @Decription 解析XML文件使用pull解析 * @author 刘楠 *  * @time2016-1-23下午6:40:33 */public class ParseXML {public static void main(String[] args) throws Exception {String str = "xml/books.xml";ArrayList<Book> books = parseXML(str);// 遍历for (Book book : books) {System.out.println(book.toString());}}/** * 解析XML,并将解析后的数据封装为对象,保存在List集合中 *  * @param str *            文件路径 * @return ArrayList<Book> * @throws Exception */public static ArrayList<Book> parseXML(String str) throws Exception {// 输入流读取文件InputStream in = new FileInputStream(str);ArrayList<Book> books = new ArrayList<Book>();// 解析工厂XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 解析器XmlPullParser parser = factory.newPullParser();// 设置输入对象与解析编码parser.setInput(in, "UTF-8");// 获取开始事件int eventType = parser.getEventType();Book book = null;/** * 开始解析 只要不是文档结束就一直循环 */while (eventType != XmlPullParser.END_DOCUMENT) {// 判断是不是开始标签if (eventType == XmlPullParser.START_TAG) {// 判断是不是book标签if ("book".equals(parser.getName())) {//book元素结点book=new Book();//获取属性个数int attributeCount = parser.getAttributeCount();//获取属性名称与值for (int i = 0; i < attributeCount; i++) {String attributeName=parser.getAttributeName(i);String attributeValue=parser.getAttributeValue(i);//System.out.println(attributeName +" = " + attributeValue);//判断 是不是ID属性的名称if("id".equals(attributeName)){//设置ID值book.setId(attributeValue);}}}else if("bookname".equals(parser.getName())){//书名String bookname=parser.nextText();//System.out.println(bookname);book.setBookname(bookname);}else if("author".equals(parser.getName())){//作者String author=parser.nextText();//System.out.println(author);book.setAuthor(author);}else if("price".equals(parser.getName())){//价格String price=parser.nextText();//System.out.println(price);book.setPrice(price);}else if("publisher".equals(parser.getName())){//出版社String publisher=parser.nextText();//System.out.println(publisher);book.setPublisher(publisher);}else if("publishDate".equals(parser.getName())){//出版时间String publishDate=parser.nextText();//System.out.println(publishDate);book.setPublishDate(publishDate);}// 判断是不是结束标签} else if (eventType == XmlPullParser.END_TAG) {// 判断是不是book标签if ("book".equals(parser.getName())) {books.add(book);}}//获取下一下指针 eventType=parser.next();}return books;}}

结果:

Book [id=001, publisher=人民邮电出版社, bookname=Android第一行代码, author=郭霖, price=51.50, publishDate=2015-06-23]Book [id=007, publisher=电子工业出版社, bookname=疯狂的JAVA讲义, author=李刚, price=84.5, publishDate=2012-12-12]




0 0
原创粉丝点击