Java之DOM解析XML文件
2016-04-11 22:17
507 查看
DOM解析XML文件
DOM:Document Object Model:文档对象模型.特点
在加载的时候,一次性的把整个XML文档加载到内存,在内存中形成一棵树(Document对象),在以后使用代码操作Document,其实就是操作的内存中的DOM树,和本地磁盘中的XML文件没有直接关系
缺点
若XML文件过大,可能造成内存溢出
性能比较低下
优点
使用简单
DOM解析XMl文件分析
对XMl文件的增删改查;
查询
1:获取文档对象 2:获取根节点 3:获取子节点 4:获取子节点元素内容
增加
1:获取文档对象 2:获取根节点 3:通过文档对象创建要添加的节点 4:给子节点设置值 5:添加子节点到上一级节点 6:添加上一级节点到文档的根节点 7:数据同步
修改
1:获取文档对象 2:获取根节点 3:获取子节点 4:修改子节点的值 5:数据同步
删除
1:获取文档对象 2:获取根节点 3:获取子节点 4:通过根节点删除子节点 :通过获取子节点的父节点,删除子节点 5:数据同步
代码
package com.dom._01; import java.io.File; 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 org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; // DOM解析XML文件 public class DOMParesXml { private File f = new File("D:/JavaApp/10-dom-sax/contacts.xml"); @Test public void query() throws Exception { // 一、需求:得到某个具体的文本节点的内容:取出第二个联系人的名字 Document doc = DocumentBuilderFactory.newInstance() .newDocumentBuilder().parse(f); Element root = doc.getDocumentElement(); Element item = (Element) root.getElementsByTagName("linkman").item(1); String content = item.getElementsByTagName("name").item(0) .getTextContent(); System.out.println(content); } @Test public void updateEmail() throws Exception { // 二、需求:修改某个元素节点的主体内容:把第一个联系人的邮箱改掉 Document doc = DocumentBuilderFactory.newInstance() .newDocumentBuilder().parse(f); Element root = doc.getDocumentElement(); Element item = (Element) root.getElementsByTagName("linkman").item(0); Node email = item.getElementsByTagName("email").item(0); email.setTextContent("xxx@xxx.com"); // 将数据同步到磁盘中 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(doc), new StreamResult(f)); } @Test public void save() throws Exception { // 需求:向指定元素节点中增加子元素节点:增加一个联系人信息 Document doc = DocumentBuilderFactory.newInstance() .newDocumentBuilder().parse(f); Element root = doc.getDocumentElement(); // 创建新元素 Element linkmanE1 = doc.createElement("linkman"); Element nameE1 = doc.createElement("name"); Element emailE1 = doc.createElement("email"); Element addressE1 = doc.createElement("address"); Element groupE1 = doc.createElement("group"); // 给子元素设置文本内容 nameE1.setTextContent("刘备"); emailE1.setTextContent("刘备@河北.com"); addressE1.setTextContent("河北"); groupE1.setTextContent("三国"); // 添加到linkmanE1 linkmanE1.appendChild(nameE1); linkmanE1.appendChild(emailE1); linkmanE1.appendChild(addressE1); linkmanE1.appendChild(groupE1); // 添加到根节点 root.appendChild(linkmanE1); // 将数据同步到磁盘的 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(doc), new StreamResult(f)); } @Test public void updateId() throws Exception { // 四、需求:操作XML文件属性:给第三个联系人设置/获取id属性 Document doc = DocumentBuilderFactory.newInstance() .newDocumentBuilder().parse(f); Element root = doc.getDocumentElement(); Element item =(Element) root.getElementsByTagName("linkman").item(2); item.setAttribute("id", "110"); //将数据同步到磁盘 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(doc), new StreamResult(f)); } @Test public void delete() throws Exception { // 五、删除指定元素节点:删除第三个联系人信息 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f); Element root = doc.getDocumentElement(); Element linkmanE1 = (Element)root.getElementsByTagName("linkman").item(2); //删除节点 //root.removeChild(linkmanE1); linkmanE1.getParentNode().removeChild(linkmanE1); //将数据同步到磁盘 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(doc), new StreamResult(f)); } @Test public void copyDoc() throws Exception { // 六、在内存中创建一个Document对象。 File file = new File("F:/abc.xml"); Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); doc.setXmlVersion("1.0"); //设置版本 Element root = doc.createElement("abc"); //创建根节点 doc.appendChild(root); //添加根节点 //将数据同步到磁盘 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(doc), new StreamResult(file)); }
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序