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