Android心得3.3--用DOM解析器解析xml文件内容.doc

1.   除了可以使用 SAX解析XML文件,大家也可以使用熟悉的DOM来解析XML文件。 DOM解析XML文件时,会将XML文件的所有内容以对象树方式存放在内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容以对象树方式存放在内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。

2.  代码如下:

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import cn.itcast.xml.domain.Person;

/**

 * 使用Dom解析xml文件

 */

public class DomXMLReader {

 

public static List<Person> readXML(InputStream inStream) {

     List<Person> persons = new ArrayList<Person>();

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

     try {

         DocumentBuilder builder = factory.newDocumentBuilder();

         Document dom = builder.parse(inStream);

         Element root = dom.getDocumentElement();

         NodeList items = root.getElementsByTagName("person");//查找所有person节点

         for (int i = 0; i < items.getLength(); i++) {

              Person person = new Person();

              //得到第一个person节点

              Element personNode = (Element) items.item(i);

              //获取person节点的id属性值

              person.setId(new Integer(personNode.getAttribute("id")));

              //获取person节点下的所有子节点(标签之间的空白节点和name/age元素)

              NodeList childsNodes = personNode.getChildNodes();

              for (int j = 0; j < childsNodes.getLength(); j++) {

              Node node = (Node) childsNodes.item(j);
              //判断是否为元素类型

              if(node.getNodeType() == Node.ELEMENT_NODE){                         Element childNode = (Element) node;

                                        //判断是否name元素

                  if ("name".equals(childNode.getNodeName())) {

                   //获取name元素下Text节点,然后从Text节点获取数据                        person.setName(childNode.getFirstChild().getNodeValue());

                  } else if (“age”.equals(childNode.getNodeName())) {

              person.setAge(new Short(childNode.getFirstChild().getNodeValue()));

                  }

              }

                 }

             persons.add(person);

         }

         inStream.close();

     } catch (Exception e) {

         e.printStackTrace();

     }

     return persons;   //一定不能忘了返回值persons

}

 

posted @ 2012-08-09 12:53  yangkai_keven  阅读(177)  评论(0编辑  收藏  举报