1.DOM解析是一种用于XML文档的对象模型,在DOM中 XML文档被模拟为树状,由于DOM的实现是将XML解析到内存中,这使得解析较大文档的时候会导致效率低下。
2.DOM规定整个XML文档是一个文档节点。
每个元素标签是一个元素节电(跟元素,子元素)
包含在每个元素中的文本是一个文本节
点
注释属于注释节点
2.实现解析
package com.example.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DOMForXML {
public static List<Person> domParse(InputStream is) throws ParserConfigurationException,SAXException,IOException{
List<Person> list=new ArrayList<Person>();
//创建DocumentBuilderFactory
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//创建DocumentBuilder
DocumentBuilder db=dbf.newDocumentBuilder();
//创建Document对象
Document document=db.parse(is);
Element root=document.getDocumentElement(); //获取跟元素节点
NodeList nodelist=root.getElementsByTagName("person");//获取跟节点下的子节点集
for(int i=0;i<nodelist.getLength();i++){
Element personElement=(Element) nodelist.item(i);
Person person=new Person();
person.setId(id);
NodeList childNodeList=personElement.getChildNodes(); //获取"person"下的子元素节点
for(int j=0;j<childNodeList.getLength();j++){
if(childNodeList.item(j).getNodeType()==Node.ELEMENT_NODE){//判断是否是元素节点
if("name".equals(childNodeList.item(j).getNodeName())){//判断元素节点名称
String name=childNodeList.item(j).getFirstChild().getNodeValue();//获取该元素节点的文本节点的值
person.setName(name);
}
if("age".equals(childNodeList.item(j).getNodeName())){
int age=Integer.valueOf(childNodeList.item(j).getFirstChild().getNodeValue());
person.setAge(age);
}
}
}
list.add(person);
}
is.close();
return list;
}
}
|