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();}}
本文详细介绍Android中Pull解析XML的方法,包括解析流程、关键步骤及代码示例。文章还提供了使用Pull解析器解析XML文件的具体实现,并展示了如何通过Pull方式生成XML文件。
2611

被折叠的 条评论
为什么被折叠?



