现在的位置: 首页 > 综合 > 正文

Android使用DOM解析xml

2013年10月04日 ⁄ 综合 ⁄ 共 1943字 ⁄ 字号 评论关闭

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

下面是实现代码

package com.scl.parse;

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.scl.domain.Person;

public class DOMParsePerson {
	public List<Person> getPersons(InputStream in) throws Throwable{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		//装载成document树对象
		Document document = builder.parse(in);
		//获得根节点
		Element root =  document.getDocumentElement();
		//获得根节点的子节点
		NodeList persons = root.getElementsByTagName("person");
		//遍历所有person节点
		List<Person> personsList = new ArrayList<Person>();
		for(int i = 0;i < persons.getLength(); i ++){
			Person person = new Person();
			//获得一个person节点
			Element personElement = (Element)persons.item(i);
			//获得一个person节点的id属性,并把id的值设置给person
			person.setId(new Integer(personElement.getAttribute("id")));
			NodeList childNodes = personElement.getChildNodes();
			//循环person节点的子节点
			for(int j = 0;j < childNodes.getLength();j++){
				Node child = childNodes.item(j);
				if(child.getNodeType() == Node.ELEMENT_NODE){
					Element e = (Element)child;
					if("name".equals(child.getNodeName())){
						person.setName(child.getFirstChild().getNodeValue());
					}
					else if("age".equals(child.getNodeName())){
						person.setAge(new Short(child.getFirstChild().getNodeValue()));
					}
				}
			}
			personsList.add(person);
		}
		
		return personsList;
	}
}

下面是单元测试代码

public void testDOMParserTest() throws Throwable{
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("person.xml");
		DOMParsePerson dom = new DOMParsePerson();
		List<Person> persons = dom.getPersons(in);
		for(Person p : persons){
			Log.i(TAG, p.toString());
		}
	}

抱歉!评论已关闭.