Android解析XML的三种方式SAX、Pull、Dom

2019-12-10 17:53:26王冬梅

从第二部分代码,可以看出使用SAX解析XML的步骤:

1、实例化一个工厂SAXParserFactory

2、实例化SAXPraser对象,创建XMLReader 解析器

3、实例化handler,处理器

4、解析器注册一个事件

4、读取文件流

5、解析文件

二、使用pull方式解析

基础知识:

      在android系统中,很多资源文件中,很多都是xml格式,在android系统中解析这些xml的方式,是使用pul解析器进行解析的,它和sax解析一样(个人感觉要比sax简单点),也是采用事件驱动进行解析的,当pull解析器,开始解析之后,我们可以调用它的next()方法,来获取下一个解析事件(就是开始文档,结束文档,开始标签,结束标签),当处于某个元素时可以调用XmlPullParser的getAttributte()方法来获取属性的值,也可调用它的nextText()获取本节点的值。

其实以上描述,就是对整个解析步骤的一个描述,看看代码吧

private List<Map<String, String>> getData() {
  List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  XmlResourceParser xrp = getResources().getXml(R.xml.channels);

  try {
   // 直到文档的结尾处
   while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
    // 如果遇到了开始标签
    if (xrp.getEventType() == XmlResourceParser.START_TAG) {
     String tagName = xrp.getName();// 获取标签的名字
     if (tagName.equals("item")) {
      Map<String, String> map = new HashMap<String, String>();
      String id = xrp.getAttributeValue(null, "id");// 通过属性名来获取属性值
      map.put("id", id);
      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
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  return list;
 }