您的位置:首页 > 编程语言 > Java开发

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 xml