📢📢📢 阿里云双十一,赠送您一张全场8折折扣优惠券

📢📢📢 2核2G3M的服务器,99元一年,新老用户续费同享!!

安卓开发 PULL解析xml源文件

xml解析  我网上查了好久资料  发现关于xml解析有三种方式  sax pull dom   各有优缺   虽然都有例子 但是没有找到一种简单的方法   (真的 只能说 国内的各个论坛的上的博客的帖子 基本都是大家转来转去 都是一样的 没有多少有用的<有用的还是有的>  也可能是我还没找到好的论坛吧)   而且源码找到的基本没有什么用  用不了或是复杂难懂  我是移植不起来       后来找到一个应用用到xml解析 然后我再把里面的相关源码提取出来才成功解析了xml       是用pull方法的   有必要解释下原理
pull是边读取文档边解析xml   读取到一个开始标签  如果是开始标签 就读取其相应的内容  读取完成后 又继续读取下一个标签(每次读取到的标签不一定是开始标签)   直到文档结束

xml文档

1
2
3
4
5
6
<!--?xml version="1.0" encoding="utf-8" ?-->
<schools>
<school name="aaa" url="11111">xxxxx</school>
<school name="bbb" url="22222">yyyyy</school>
<school name="ccc" url="33333">zzzzz</school>
</schools>

源码是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private List <Map<String,String>> getData() {
List <Map<String,String>> list = new ArrayList<>();
XmlResourceParser xrp = getResources().getXml(R.xml.schools); //获取xml文档
try {
while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) { //直到文档结尾
if (xrp.getEventType() == XmlResourceParser.START_TAG) { //如果读取到开始标签
String tagName = xrp.getName(); // 获取标签的名字
if (tagName.equals("school")) { //标签名字为school
Map <String,String> map = new HashMap<>(); //我把数据存放到一个map的list里
String name = xrp.getAttributeValue(null, "name"); // 通过属性名来获取属性值
map.put("name", name);
String url = xrp.getAttributeValue(1); // 通过属性次序来获取属性值
map.put("url", url);
map.put("name", xrp.nextText()); //获取这个标签的内容
list.add(map);
}
}
xrp.next(); // 获取解析下一个事件
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
return list;
}

这样就算好了 最后在调用

1
2
List<Map<String, String>> Schools=getData();
String ss=Schools.get(0).get("name");//列表中第一个

基本就是这样了

但是其实我的xml是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!--?xml version="1.0" encoding="utf-8" ?-->
<schools>
<school>
<name>aaa</name>
<url>11111</url>
<description>xxxxx</description>
</school>
<school>
<name>bbb</name>
<url>22222</url>
<description>yyyyy</description>
</school>
<school>
<name>ccc</name>
<url>22222</url>
<description>zzzzz</description>
</school>
</schools>

我又费了一点功夫才弄好的   读者自己试试看呗~~