安卓开发 PULL解析xml源文件

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

xml文档

<!--?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>

源码是这样的

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

这样就算好了 最后在调用

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

基本就是这样了

但是其实我的xml是这样的

<!--?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>

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