除了使用 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());
}
}
本文介绍如何使用DOM解析XML文件,通过创建文档树结构便于检索数据。提供了具体的Java代码示例,展示了如何读取XML文件并解析其中的元素。
552

被折叠的 条评论
为什么被折叠?



