XML解析&XMLPullParser

Pull解析:
    Android官方自带的解析方式---所有布局文件的XML解析都是使用该解析方式

解析事件对应的数字:
     |--0: 文档开始 XmlPullParser.OPEN_DOCUMENT
     |--1:文档结束 XmlPullParser.END_DOCUMENT
     |--2:标签开始 XmlPullParser.START_TAG
     |--3:标签结束 XmlPullParser.END_TAG
     |--4:标签内容 XmlPullParser.TEXT

XmlPullParser中的重要方法:
     |--setInput(Reader r): 设置要解析的流
    |--getEventType():得到解析的事件类型
    |--next():获得下一个时间类型
    |--getName():获得当前事件的标签名
    |--nextText():获得当前标签后面的一个文本的值
    |--getAttributeCount():获得当前事件节点的属性个数
    |--getAttributeName(i):得到当前事件节点的第i个属性属性的名称
    |--getAttributeValue():得到属性对应的值

XmlPullParser解析的步骤:
    1、加入jar包,加入到build path
    2、创建一个解析工厂
    3、从工厂中得到解析器
    4、确定要解析的文本流
    5、得到事件类型
    6、根据类型去解析

代码示意: 
     xml文件中的内容:
  
  
<?xml version="1.0" encoding="utf-8"?>
<games>
<game>
<id>1</id>
<name>完美国际2</name>
<company>完美世界</company>
</game>
<game>
<id>2</id>
<name>LOL</name>
<company>Tencent</company>
</game>
<game>
<id>3</id>
<name>DOTA</name>
<company>暴雪</company>
</game>
</games>
    解析示意:
  
  
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
 
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
 
public class PullParserDemo02 {
 
public static void main(String[] args) throws Exception {
List<Game> list = parse("xml/games.xml");
for (Game game : list) {
System.out.println(game);
}
}
 
public static List<Game> parse(String file) throws Exception {
List<Game> list = null;
Game game = null;     //Game新建的类
// 创建工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
 
// 得到解析器
XmlPullParser parser = factory.newPullParser();
 
// 设置解析的文件的地址
parser.setInput(new FileReader(file));
 
// 解析啊
int type = parser.getEventType();
while (type != 1) {
 
switch (type) {
case XmlPullParser.START_DOCUMENT: // 开始解析文件的时候创建集合
list = new ArrayList<Game>();
break;
case 2: // 解析到标签的时候
String tag = parser.getName();
if (tag.equals("game")) {
game = new Game();
} else {
if (tag.equals("id")) {
game.setId(parser.nextText());
} else {
 
if (tag.equals("name")) {
game.setName(parser.nextText());
} else {
if (tag.equals("company")) {
game.setCompany(parser.nextText());
}
}
}
 
}
break;
case 3:// 遇到结尾标签
String tag_ = parser.getName();
if (tag_.equals("game")) { // 遇到以game结尾的标签就加入集合中
list.add(game);
game = null;
}
break;
}
type = parser.next();
}
 
return list;
}
}
利用 XmlSerializer写xml文件(了解)
    1、创建构造工厂
    2、得到数据寄存器
    3、设置输出数据源
    4、开始创建XML
         |--设置文档的编码和**
         |--创建节点和内容
         |--结束节点
    5、关流
代码示意:
  
  
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
 
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
 
/**
* 使用pull解析创建xml文件
* @author Mixm
* @date 2015年10月10日 上午12:15:22
*/
public class XMLWrite {
public static void main(String[] args) throws Exception {
List<Game> list = new ArrayList<>();
list.add(new Game("11", "DNF", "Tencent"));
list.add(new Game("12", "FND", "Tnecnet"));
list.add(new Game("13", "MXD", "冒险岛"));
String path= "xml/mygame.xml";
writeXML(list, path);
}
 
private static void writeXML(List<Game> list, String path) throws Exception {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlSerializer serializer = factory.newSerializer();
serializer.setOutput(new FileWriter(path));
serializer.startDocument("utf-8", true);
serializer.startTag(null, "games");
for (Game game : list) {
serializer.startTag(null, "game");
serializer.startTag(null, "id");
serializer.attribute(null, "aa", "不是最爱1");
serializer.text(game.getId());
serializer.endTag(null, "id");
serializer.startTag(null, "name");
serializer.text(game.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "company");
serializer.text(game.getCompany());
serializer.endTag(null, "company");
serializer.endTag(null, "game");
}
serializer.endTag(null, "games");
//这儿不刷新 我的写入失败了
serializer.flush();
}
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值