除了可以使用 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;
}
}

更多相关文章

  1. Android(安卓)windows系统上安装与使用NDK
  2. Java利用TCP协议发送文件(三)--客户端设计
  3. Android(安卓)Studio 使用Gradle引入第三方库文件的总结(Jar文件
  4. android中app的优化流程
  5. [Android]多module合成单一module技巧
  6. Android:将电脑上的文件传输到模拟器的sdcard上
  7. Android(安卓)SDK工具(谷歌提供的16个工具)简介
  8. Android采用Pull解析和生成xml文档
  9. Android(安卓)Studio中manifest文件中的package包名和module中的

随机推荐

  1. Android应用程序的六个组成部分
  2. eclipse导入已存在的android工程时遇到An
  3. 设置Button背景渐变效果和点击效果
  4. ASM + Transform 在android中的使用
  5. Android第三方jar包ClassNotFind
  6. 【Arcgis for android】程序运行出错原因
  7. android 中遥控器键值的添加和修改
  8. Android(安卓)Studio 使用笔记(1) -- 设置
  9. Android中LocationManager的简单使用,获
  10. Application Fundamentals