这几天又懒了, 赶紧补上一篇, 不然又忘了..
DOM解析跟SAX解析比起来 , 比较占用内存 , 因为SAX解析相当于猴子摘玉米 , 摘一个扔一个, DOM解析就相当于用车拉了,先把所有的都装上, 然后再慢慢解析 . 对于比较大的XML文件不适合 , 尤其是在内存相对比较小的移动平台上 . 但是DOM来解析规模比较小的设置文件 还是很不错滴 .
public static List<Person> getPersons(InputStream is) throws Exception {
List<Person> persons = new ArrayList<Person>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(is);
Element root = document.getDocumentElement();
NodeList personNodes = root.getElementsByTagName("person");
for (int i = 0; i < personNodes.getLength(); i++) {
Element personElement = (Element) personNodes.item(i);
int id = Integer.valueOf(personElement.getAttribute("id"));
Person person = new Person();
person.setId(id);
NodeList childNodes = personElement.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
if (childNodes.item(j).getNodeType() == Node.ELEMENT_NODE) {
if ("name".equals(childNodes.item(j).getNodeName())) {
String name = childNodes.item(j).getFirstChild()
.getNodeValue();
person.setName(name);
} else if ("age".equals(childNodes.item(j).getNodeName())) {
String age = childNodes.item(j).getFirstChild()
.getNodeValue();
person.setAge(Integer.parseInt(age));
}
}
}
persons.add(person);
}
is.close();
return persons;
}