dom读取xml文档---android

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

 

关键代码一

package com.leequer.Service;


import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

import com.leequer.Doem.Person;


import android.test.AndroidTestCase;
import android.util.Log;

public class Test extends AndroidTestCase {
 private String PERSONSTRING = "ObjectPerson";
 public void testReadXml() throws Exception
 {//类装载器
  InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("NewFile.xml");
  
  List <Person> personsList = ReadXmlByDomService.ReadXmlByDom(inputStream);
  
  for (Iterator iterator = personsList.iterator(); iterator.hasNext();) {
   Person person = (Person) iterator.next();
   Log.i(PERSONSTRING, person.toString());
  }
  
 }
}

关键代码二

package com.leequer.Service;

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 com.leequer.Doem.Person;
/**
 * 使用dom解析xml
 * 2010-04-26
 * @author leequer
 *
 */
public class ReadXmlByDomService {
 
 public static List<Person> ReadXmlByDom (InputStream inputStream)throws Exception
 {
  List <Person> personList = new ArrayList<Person>();
  //创建文档读取工厂
  DocumentBuilderFactory documentBuilderFactory  = DocumentBuilderFactory.newInstance();
  //创建读去对象
  DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
  //对以输入流方式传进来的信息进行解析 整个xml文档就以树的形式存在document中
  Document document = builder.parse(inputStream);
  //得到根元素
  Element root = document.getDocumentElement();
  //得到person元素节点 这个对象中就存在persons下面的所以节点 就是很多的person节点
  NodeList nodes = root.getElementsByTagName("person");
  for(int i= 0 ;i<nodes.getLength();i++)
  {
   /**
    * persons下面的节点是元素节点 person 用element就行了
    */
   Element element = (Element)nodes.item(i);
   Person person = new Person();
   person.setId(element.getAttribute("id"));//属性
   /**
    * perons节点中包含的有元素节点name age 和文本节点 23 李明 所以我们迭代的时候要用note
    */
   NodeList childnotes = element.getChildNodes();//得到子节点的列表
   for (int j = 0 ; j < childnotes.getLength();j++)
   {
    Node node = (Node)childnotes.item(j);
    /**
     * node中有元素 也有文本节点 还包括回车和空格的文本节点 但是我们不关心回车和空格
     */
    if(node.getNodeType()==Node.ELEMENT_NODE)
    {
     //如果是element节点 把它转换成element
     Element childElement = (Element)node;
     if("name".equals(childElement.getNodeName()))
     {
      person.setName(childElement.getFirstChild().getNodeValue());
     }
     if("age".equals(childElement.getNodeName()))
     {
      person.setAge(childElement.getFirstChild().getNodeValue());
     }
    }
   }
   personList.add(person);
  }
  return personList;
 }
}

你可能感兴趣的:(android,xml,J#)