02dom解析
DOM是一种用于XML文档的对象模型,可用于直接访问XML文档的各个部分,通过DOM将XML文档作为一个树状的结构,这种树状的结构成为节点树

第一步 新建类DOM解析类
package com.xiaoxin.xml.DOM;
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.xiaoxin.xml.bean.Person;
public class Dom {
public static List<Person> getPersons(InputStream inStream)
throws Exception {
// 1.用一个集合来放东西
List<Person> persons = new ArrayList<Person>();
// 2.DocumentBuilderFactory该对象将创建DocumentBuilder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 设置去掉空格的方法
factory.setIgnoringElementContentWhitespace(true);
// 3.DocumentBuilder 将实际进行解析以创建Document
DocumentBuilder builder = factory.newDocumentBuilder();
// 4.将文件路径进行解析
Document document = builder.parse(inStream);
// 5.返回文档的根元素
Element root = document.getDocumentElement();
// 6.取出某个特定的元素。一开始以为它的返回值是一个数组,结果,大错特错。它返回的是一个 DOM 对象,可以遍历,有 length
// 属性,但不是数组。
NodeList personNodes = root.getElementsByTagName("person");
//开始遍历整个XML
for (int i = 0; i < personNodes.getLength(); i++) {
Element perElement = (Element) personNodes.item(i);
//对给定的Node返回给定名称的属性,并且是interger类型的
int id = new Integer(perElement.getAttribute("id"));
Person person = new Person();
//设置ID的属性
person.setId(id);
NodeList childNodes = perElement.getChildNodes();
for (int y = 0; y < childNodes.getLength(); y++) {
if (childNodes.item(y).getNodeType() == Node.ELEMENT_NODE)
;
{
if ("name".equals(childNodes.item(y).getNodeName())) {
String name = childNodes.item(y).getFirstChild()
.getNodeValue();
person.setName(name);
} else if ("age".equals(childNodes.item(y).getNodeName())) {
String age = childNodes.item(y).getFirstChild()
.getNodeValue();
person.setAge(new Short(age));
}
}
}
persons.add(person);
}
inStream.close();
return persons;
}
}
第二部 测试代码 与SAX测试代码是相差不大的
package com.xiaoxin.xml.DOM;
import java.io.InputStream;
import java.util.List;
import com.xiaoxin.xml.bean.Person;
import android.test.AndroidTestCase;
import android.util.Log;
public class DomPersonService extends AndroidTestCase {
private static final String TAG = "DomPersonService";
public void testDom() throws Throwable {
// 因为XML在src文件中 可以直接反射到路径 inputStream
InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream("xiaoxin.xml");
List<Person>persons=Dom.getPersons(inputStream);
for(Person person:persons){
Log.i(TAG, person.toString());
}
}
}