Android DOM方式解析XML文件

 

l 除了可以使用 SAX 解析 XML 文件,大家也可以使用熟悉的 DOM 来解析 XML 文件。 DOM 解析 XML 文件时,会将 XML 文件的所有内容读取到内存中,然后允许您使用 DOM API 遍历 XML 树、检索所需的数据。使用 DOM 操作 XML 的代 码看起来比较直观,并且,在某些方面比基于 SAX 的实现更加简单。但是,因为 DOM 需要将 XML 文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行 Android 的移动设备来说,因为设备的资源比较宝贵,所以建议 还是采用 SAX 来解析 XML 文件,当然,如果 XML 文件的内容比较小采用 DOM 是可行的。
DomPersonService.java:
package com.gao.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.gao.domain.Person; public class DomPersonService { public static List<Person> readXML(InputStream inputStream)throws Exception { List<Person> personList=new ArrayList<Person>(); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document document=builder.parse(inputStream); Element root= document.getDocumentElement(); NodeList nodes=root.getElementsByTagName("person"); for (int i = 0; i < nodes.getLength(); i++) { Element personElement=(Element)nodes.item(i); Person person=new Person(); person.setId(new Integer(personElement.getAttribute("id"))); NodeList childNodes=personElement.getChildNodes(); for (int j = 0; j < childNodes.getLength(); j++) { Node childNode=childNodes.item(i); if (childNode.getNodeType()==Node.ELEMENT_NODE) { Element childElement=(Element)childNode; if ("name".equals(childElement.getNodeName())) { person.setName(childElement.getFirstChild().getNodeValue()); }else if ("age".equals(childElement.getNodeName())) { person.setAge(new Integer(childElement.getFirstChild().getNodeValue())); } } } personList.add(person); } return personList; } }  
Element 和Text都是Node
测试:
public void testReadDOMXML() throws Exception { InputStream inputStream=XMLPersonServiceTest.class.getClassLoader().getResourceAsStream("gao.xml"); List<Person> persons=DomPersonService.readXML(inputStream); for (Person person : persons) { Log.i(TAG, person.toString()); } } 

 

你可能感兴趣的:(android,xml,exception,api,Integer,Class)