Java之Pull方式生成xml文件和解析xml文件

Pull XML解析器早已经被google集成到android sdk当中,它是google官方推荐的解析器。

如果我们要在Java桌面、J2ME等当中使用Pull方式生成xml文件和解析xml文件,需要用到kxml2;

KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是

普通XML PULL解析器的官网是

实验开始:

在Eclipse中新建一个java项目,其中新建一个libs文件夹,拷贝从网上下载的kxml2-2.2.2.jar文件到其中,配置好编译路径;

我们要操作的xml文件样式如下:

<?xml version="1.0" encoding="UTF-8"?> <root><wisdom id="1"><content>此刻打盹,你将做梦;而此刻学习,你将圆梦</content><author>哈佛图书馆</author></wisdom><wisdom id="2"><content>我荒废的今日,正是昨日殒身之人祈求的明日</content><author>哈佛图书馆</author></wisdom></root>

对应xml文件中的每一个节点用一个实体类来描述:

public class Wisdom {private int id;private String content;private String author;public Wisdom() {super();}public Wisdom(String content, String author) {super();this.content = content;this.author = author;}public Wisdom(int id, String content, String author) {super();this.id = id;this.content = content;this.author = author;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}}

核心类有两大功能:

1.解析

2.生成

import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.kxml2.io.KXmlParser;import org.kxml2.io.KXmlSerializer;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlSerializer;/** * * @author Administrator * */public class PullDemo {/** * 解析输入流中的xml文件 * * @param is 输入流 * @return 解析结果集 */public List<Wisdom> parseXml(InputStream is) {// 声明返回值List<Wisdom> wisdomList = null;// 获取解析对象XmlPullParser xmlPullParser = new KXmlParser();try {// 设置输入流的编码xmlPullParser.setInput(is, "utf-8");// 获取解析的事件类型int eventType = xmlPullParser.getEventType();// 声明一个Wisdom引用Wisdom wisdom = null;// 判断文件解析的是否完毕while (eventType != XmlPullParser.END_DOCUMENT) {String tagName = xmlPullParser.getName();switch (eventType) {case XmlPullParser.START_DOCUMENT:wisdomList = new ArrayList<Wisdom>();break;case XmlPullParser.START_TAG:if ("wisdom".equals(tagName)) {// 创建wisdom对象wisdom = new Wisdom();wisdom.setId(Integer.parseInt(xmlPullParser.getAttributeValue(null, "id")));} else if ("content".equals(tagName)) {wisdom.setContent(xmlPullParser.nextText());} else if ("author".equals(tagName)) {wisdom.setAuthor(xmlPullParser.nextText());}break;case XmlPullParser.END_TAG:if ("wisdom".equals(tagName) && wisdom != null) {// 把wisdom对象加入到集合中去wisdomList.add(wisdom);wisdom = null;}break;}//读取下一个事件eventType = xmlPullParser.next();}//关闭输入流is.close();} catch (Exception e) {e.printStackTrace();}return wisdomList;}/** * 根据List列表中的内容生成xml文件 * * @param wisdomList *装在多个wisdom对象的List * @return true表示生成成功,false表示生成失败 */public boolean createXML(List<Wisdom> wisdomList) {// 采用pull解析进行实现// 目标文件路径String filePath = "D:\\wisdoms.xml";// 目标文件File file = new File(filePath);// 获得xml序列化实例XmlSerializer serializer = new KXmlSerializer();// 文件写入流实例FileOutputStream fos = null;try {// 根据文件对象创建一个文件的输出流对象fos = new FileOutputStream(file);// 设置输出的流及编码serializer.setOutput(fos, "utf-8");// 设置文件的开始serializer.startDocument("UTF-8", true);// 设置文件开始标签serializer.startTag(null, "root");for (Wisdom wisdom : wisdomList) {// wisdom标签的开始serializer.startTag(null, "wisdom");// 设置wisdom标签的属性serializer.attribute(null, "id", wisdom.getId() + "");// 设置wisdom标签的子标签 contentserializer.startTag(null, "content");serializer.text(wisdom.getContent());serializer.endTag(null, "content");// 设置wisdom标签的子标签的ageserializer.startTag(null, "author");serializer.text(wisdom.getAuthor());serializer.endTag(null, "author");// wisdom标签的结束serializer.endTag(null, "wisdom");}// 设置文件结束标签serializer.endTag(null, "root");// 文件的结束serializer.endDocument();serializer.flush();fos.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}}

在main方法中使用核心类,先在D盘(windows操作系统)生成xml文件,然后解析这个xml文件,,把解析出来的集合打印到控制台。

如果寒暄只是打个招呼就了事的话,那与猴子的呼叫声有什么不同呢?事实上,

Java之Pull方式生成xml文件和解析xml文件

相关文章:

你感兴趣的文章:

标签云: