这是一个重要的问题---什么是 XML?
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准
xml数据结构有很多种解析数据的方式今天我们先来说一下pull解析
- 简单介绍一下什么是pull解析pull解析是事件驱动的所以根据数据的开始结束标记进行分析。
FileInputStream fileInputStreamOFD = new FileInputStream(path + "/image2" + "/aaa.xml");
这是以文件形式读取的流 解析文件的时候要把流的形式读
我们解析的方法提成一个类
public class ParserByPull {
//采用XmlPullParser来解析文件
public static List<Bean> get(InputStream inputStream) throws Throwable {
List<Bean> beanlist = null;
Bean bean = null;
//创建XmlPullParser
XmlPullParser parser = Xml.newPullParser();
//解析文件输入流
parser.setInput(inputStream, "UTF-8");
//得到当前的解析对象
int eventType = parser.getEventType();
//当解析工作还没完成时,调用next()方法得到下一个解析事件
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
//解析开始的时候初始化list
beanlist = new ArrayList<>();
break;
case XmlPullParser.START_TAG:
//获得解析器当前指向的元素的名字
String XPPname = parser.getName();
if ("DocInfo".equals(XPPname)) {
bean = new OfdBean();
}
if (bean != null) {
if ("DocID".equals(XPPname)) {
//得到当前指向元素的值并赋值给name
bean.setDocID(parser.nextText());
}
if ("CreationDate".equals(XPPname)) {
//得到当前指向元素的值并赋值给age
bean.setCreationDate(parser.nextText());
}
if ("CreatorVersion".equals(XPPname)) {
//得到当前指向元素的值并赋值给sex
bean.setCreatorVersion(parser.nextText());
}
if ("DocRoot".equals(XPPname)) {
//通过解析器获取id的元素值,并设置一个新的Student对象的id
bean.setDocRoot(parser.nextText());
}
}
break;
//出发结束元素事件
case XmlPullParser.END_TAG:
if ("OFD".equals(parser.getName())) {
beanlist.add(bean);
bean = null;
}
break;
default:
break;
}
eventType = parser.next();
}
return beanlist;
}
}
由于这是事件驱动我们来看一下事件
int START_DOCUMENT = 0;
开始解析
int END_DOCUMENT = 1;
结束解析
int START_TAG = 2;
开始标
int END_TAG = 3;
结束标
int TEXT = 4;
下一个
int ENTITY_REF = 6;
错误
还有很多。。。。
大家看源码去 大致的流程就是这样的