首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

dom读取xml文档-android

2012-09-14 
dom读取xml文档---android除了可以使用 SAX解析XML文件,大家也可以使用熟悉的DOM来解析XML文件。 DOM解析XM

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;
?}
}

热点排行