DOM概念 :
文档对象模型。DOM把XML文件映射成一棵倒挂的“树”,以根元素为根节点,每个节点都以对象的形式存在
大体步骤:
1.借助字节输入流,获取当前xml文档到jvm虚拟机中(磁盘->jvm)
InputStream is = new FileInputStream("src/com/tencent/test2/dom.xml");
2.使用DOM解析器解析xml文档
2.1.得到DOM工厂实例对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2.2.从工厂中获取DOM解析工具
DocumentBuilder tool = factory.newDocumentBuilder();
2.3借助工具,将流中的xml字节文档转为doc
注:Document对象:代表整个xml文档,所有其他节点都以一定的顺序包含在其内部,我们总是会先得到这个对象,然后再执行后续操作
Document doc = tool.parse(is);
3.维护xml文档(新增、修改、删除操作)
4.重新保存到磁盘中(jvm->磁盘)
4.1.借助字节输出流,将doc存入流中
OutputStream os=new FileOutputStream("src/com/tencent/test2/dom.xml");
4.2.得到工厂实例
TransformerFactory factory = TransformerFactory.newInstance();
4.3.从工厂中获取工具
Transformer tool = factory.newTransformer();
4.4.开始传输,但是需要先准备数据源和目标位置
4.4.1.数据源:
DOMSource dom =new DOMSource(doc);
4.4.2.目标位置:
StreamResult result=new StreamResult(os);
4.4.3.借助工具,将流中的dom输出到磁盘中
tool.transform(dom,result);
实现代码:
整体思路:
1.先创建一个dom.xml文档(相对路径)
<?xml version="1.0" encoding="UTF-8" standalone="no"?><students>
<student>
<name>张三</name>
<age>19</age>
<stuno>16001</stuno>
</student>
<student>
<name>李四</name>
<age>18</age>
<stuno>16002</stuno>
</student>
<student>
<name>王五</name>
<age>21</age>
<stuno>16003</stuno>
<!--<atuno>16003</atuno>此位置字母不小心打错了!!还是应为 stuno -->
</student>
</students>
2.导入的包(不需要手动打)
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
3.创建一个DOM测试类
public class DomTest{
Document doc;//将Document doc;定义在单个方法外,方便全局使用
}
4.开始
步骤1:借助字节输入流,获取当前xml文档到jvm虚拟机中(磁盘->jvm),并获得DOM解析器
@Before
public void init() throws Exception {
//1.借助字节输入流从磁盘获取xml文档到流中
InputStream is = new FileInputStream("src/com/tencent/test2/dom.xml");
//2.通过DOM工具从流中获取到JVM虚拟机中
//2.1.得到DOM工厂实例对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//2.2.从工厂中获取DOM解析工具
DocumentBuilder tool = factory.newDoc