一、DOM(Document Object Model, 文档对象模型),在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。
二、DOM解析核心操作接口有四个:
1.Document:此接口代表了整个XML文档,表示的是整颗DOM树的根,提供了对文档中的数据进行访问和操作的入口,通过Document节点可以访问XML文件中所有的元素内容。
2.Node:此接口在整个DOM树中具有举足轻重的地位,DOM操作的核心接口中有很大一部分接口是从Node接口继承过来的。例如:Document、Element、Attri等接口。
3.NodeList:此接口表示的是一个节点的集合,一般用于表示有顺序关系的一组节点。
4.NamedNodeMap:此接口表示的是一组节点和其唯一名字对应的一一对应关系,此接口主要用于属性节点的标识上。
三、DOM解析过程:
1.建立DocumentBuilderFactory:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2.建立DocumentBuilder:
DocumentBuilder builder = factory.newDocumentBuilder();
3.建立Document:
Document doc = builder.parse("要读取的文件路径");
5.建立NodeList:
NodeList nl = doc.getElementsByTagName("读取节点");
6.进行XML信息读取。
四、生成XML文档:
package he.xiao.wei;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class BuildXML {
public static void main(String[] args) throws Exception {
//取得DocumentBuilderFactory类的对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//取得DocumentBuilder类的对象
DocumentBuilder builder = factory.newDocumentBuilder();
//创建一个新的XML文档
Document doc = builder.newDocument();
Element addresslist = doc.createElement("addresslist");
Element linkman = doc.createElement("linkman");
Element name = doc.createElement("name");
Element email = doc.createElement("email");
//设置节点内容
name.appendChild(doc.createTextNode("Joywy"));
email.appendChild(doc.createTextNode("1248034855@qq.com"));
//设置各个节点的关系
linkman.appendChild(name);
linkman.appendChild(email);
addresslist.appendChild(linkman);
doc.appendChild(addresslist);
NodeList nl = doc.getElementsByTagName("linkman");
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.ENCODING, "GBK"); //处理中文
DOMSource source = new DOMSource(doc); //准备输出文档
StreamResult result = new StreamResult(new File("E:" + File.separator + "Joywy.xml"));
t.transform(source, result);
}
}
五、DOM解析:
package he.xiao.wei;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DOMDemo {
public static void main(String[] args) throws Exception{
//取得DocumentBuilderFactory类的对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//取得DocumentBuilder类的对象
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("E:"+File.separator + "info.xml"));
//得到所有的linkman节点
NodeList nl = doc.getElementsByTagName("linkman");
for(int i = 0; i < nl.getLength(); i++){
Element e = (Element)nl.item(i);
System.out.println(e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
System.out.println(e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());
}
}
}