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

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

三、使用Dom方式解析

基础知识:

     最后来看看Dom解析方式,这种方式解析自己之前也没有用过(在j2ee开发中比较常见,没有做过这方面的东西),在Dom解析的过程中,是先把dom全部文件读入到内存中,然后使用dom的api遍历所有数据,检索想要的数据,这种方式显然是一种比较消耗内存的方式,对于像手机这样的移动设备来讲,内存是非常有限的,所以对于比较大的XML文件,不推荐使用这种方式,但是Dom也有它的优点,它比较直观,在一些方面比SAX方式比较简单。在xml文档比较小的情况下也可以考虑使用dom方式。

Dom方式解析的核心代码如下:

public static List<channel> getChannelList(InputStream stream)
 {
  List<channel> list=new ArrayList<channel>();
  
  //得到 DocumentBuilderFactory 对象, 由该对象可以得到 DocumentBuilder 对象
  DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
  
  try {
   //得到DocumentBuilder对象
   DocumentBuilder builder=factory.newDocumentBuilder();
   //得到代表整个xml的Document对象
   Document document=builder.parse(stream);
   //得到 "根节点" 
   Element root=document.getDocumentElement();
   //获取根节点的所有items的节点
   NodeList items=root.getElementsByTagName("item"); 
   //遍历所有节点
   for(int i=0;i<items.getLength();i++)
   {
    channel chann=new channel();
    Element item=(Element)items.item(i);
    chann.setId(item.getAttribute("id"));
    chann.setUrl(item.getAttribute("url"));
    chann.setName(item.getFirstChild().getNodeValue());
    list.add(chann);
   }
   
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  return list;
 }

总结一下Dom解析的步骤(和sax类似)

1、调用 DocumentBuilderFactory.newInstance() 方法得到 DOM 解析器工厂类实例。

2、调用解析器工厂实例类的 newDocumentBuilder() 方法得到 DOM 解析器对象