DOM解析xml文件的原理是把xml文件的文档树对象全部加载到内存中,然后解析,这种解析方式的缺点在于在手机、pad等CPU运算速度不快,内存有限的设备上会影响软件效率和系统性能。
使用DOM技术解析XML文件案例:
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="1"> <name>maomao</name> <age>26</age> </person> <person id="2"> <name>hy</name> <age>27</age> </person> </persons>
解析代码:
public static List<Person> domParse(InputStream inStream) throws Exception {
List<Person> persons = new ArrayList<Person>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(inStream);
// 获得根节点
Element root = document.getDocumentElement();
NodeList personElements = root.getElementsByTagName("person");
for(int i=0; i<personElements.getLength(); i++) {
Person person = new Person();
Element personElement = (Element) personElements.item(i);
person.setId(Integer.parseInt(personElement.getAttribute("id")));
// 获得person元素节点下所有的节点,其中包含文本节点和元素节点
NodeList personChilds = personElement.getChildNodes();
for(int j=0; j<personChilds.getLength(); j++) {
// 判断节点是否为元素节点
if(personChilds.item(j).getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element)personChilds.item(j);
if(element.getNodeName().equals("name")) {
// 取得元素节点第一个节点的值
person.setName(element.getFirstChild().getNodeValue());
} else if(element.getNodeName().equals("age")) {
person.setAge(new Short(element.getFirstChild().getNodeValue()));
}
}
}
persons.add(person);
}
return persons;
}