Android使用DOM解析xml

来源:互联网 发布:jquery.metismenu.js 编辑:程序博客网 时间:2024/06/02 19:16

除了使用 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的值设置给personperson.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());}}


原创粉丝点击