java pull 修改 xml_Java之Pull方式生成xml文件和解析xml文件

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

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

KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是http://kxml.org/

实验开始:

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

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

此刻打盹,你将做梦;而此刻学习,你将圆梦

哈佛图书馆

我荒废的今日,正是昨日殒身之人祈求的明日

哈佛图书馆

对应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 parseXml(InputStream is) {

// 声明返回值

List 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();

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 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标签的子标签 content

serializer.startTag(null, "content");

serializer.text(wisdom.getContent());

serializer.endTag(null, "content");

// 设置wisdom标签的子标签的age

serializer.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文件,把解析出来的集合打印到控制台。

import java.io.File;

import java.io.FileInputStream;

import java.util.ArrayList;

import java.util.List;

public class PullTest {

public static void main(String[] args) {

//*************初始化List列表集合****开始**************

ArrayList wisdomList = new ArrayList<>();

Wisdom w = new Wisdom();

w.setId(1);

w.setContent("此刻打盹,你将做梦;而此刻学习,你将圆梦");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(2);

w.setContent("我荒废的今日,正是昨日殒身之人祈求的明日");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(3);

w.setContent("觉得为时已晚的时候,恰恰是最早的时候");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(4);

w.setContent("勿将今日之事拖到明日");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(5);

w.setContent("学习时的苦痛是暂时的,未学到的痛苦是终生的");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(6);

w.setContent("学习这件事,不是缺乏时间,而是缺乏努力");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(7);

w.setContent("幸福或许不排名次,但成功必排名次");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(8);

w.setContent("学习并不是人生的全部。但既然连人生的一部分——学习也无法征服,还能做什么呢?");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(9);

w.setContent("请享受无法回避的痛苦");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(10);

w.setContent("只有比别人更早、更勤奋地努力,才能尝到成功的滋味");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(11);

w.setContent("谁也不能随随便便成功,它来自彻底的自我管理和毅力");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(12);

w.setContent("时间在流逝");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(13);

w.setContent("现在流的口水,将成为明天的眼泪");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(14);

w.setContent("狗一样地学,绅士一样地玩");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(15);

w.setContent("今天不走,明天要跑");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(16);

w.setContent("投资未来的人,是忠于现实的人");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(17);

w.setContent("受教育程度代表收入");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(18);

w.setContent("一天过完,不会再来");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(19);

w.setContent("即使现在,对手也不停地翻动书页");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

w = new Wisdom();

w.setId(20);

w.setContent("没有艰辛,便无所获");

w.setAuthor("哈佛图书馆");

wisdomList.add(w);

//*************初始化List列表集合****结束**************

//新建PullDemo对象

PullDemo pd = new PullDemo();

//生成xml文件

pd.createXML(wisdomList);

try {

File file = new File("D:\\wisdoms.xml");

//读取文件流

FileInputStream fis = new FileInputStream(file);

//调用解析xml方法获得结果集合

List list = pd.parseXml(fis);

//循环打印

for (Wisdom wisdom : list) {

System.out.println(wisdom.getContent());

}

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}

实验结束。在此附上KXML2的jar包下载地址:kml2-2.2.2.jar

希望以上代码对大家有所帮助!

原文:http://blog.csdn.net/bear_huangzhen/article/details/46554721

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值