java使用dom4j对XML进行CURD操作
要使用dom4j必须导入两个jar包:
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar

使用dom4j新建一个XML文件:
/**
* 利用dom4j完成新增一个xml文件
* @throws Exception
*/
@Test
public void test_Cread() throws Exception{
// 创建一个空的dom对象
Document dom = DocumentHelper.createDocument();
// 创建一个根标签 persons
Element root = dom.addElement("persons");
// 在root标签中添加一个子标签 person
Element person1 = root.addElement("person");
// 给person添加一个属性 address
person1.addAttribute("address", "上海");
// 添加子标签 name
Element name1 = person1.addElement("name");
name1.setText("张飞");
// 添加子标签 age
Element age1 = person1.addElement("age");
age1.setText("30"); // 创建另外一个person标签
Element person2 = root.addElement("person");
// 给person添加一个属性 address
person2.addAttribute("address", "天津");
// 添加子标签 name
Element name2 = person2.addElement("name");
name2.setText("关羽");
// 添加子标签 age
Element age2 = person2.addElement("age");
age2.setText("25"); // 保存xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
writer.write(dom);
writer.close();
}
执行结果:(会在项目的根目录下产生一个:persons.xml文件内容如下)

查询元素:
/**
* 利用dom4j完成查询元素,使用xpath技术查询
* @throws Exception
*/
@Test
public void test_Select() throws Exception{
// 获取dom对象
SAXReader saxReader = new SAXReader();
Document dom = saxReader.read(new FileReader("persons.xml"));
// 获取有 address="天津"属性的person标签
Node node = dom.selectSingleNode("//person[@address='天津']");
// 再获取 当前节点下面的name标签的值
List<Element> nameList = node.selectNodes("./name");
Element name = nameList.get(0);
String nameValue = name.getText();
// 打印的值为关羽
System.out.println(nameValue); }
修改元素的值:
/**
* 利用dom4j完成修改元素的值
* @throws Exception
*/
@Test
public void test_Modify() throws Exception{
// 获取dom对象
SAXReader saxReader = new SAXReader();
Document dom = saxReader.read(new FileReader("persons.xml"));
// 将关羽的年龄改成38
Element age = (Element) dom.selectSingleNode("//person[@address='天津']/age");
age.setText("38"); // 保存xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
writer.write(dom);
writer.close();
}
执行结果:

删除节点:
/**
* 利用dom4j完成删除节点
* @throws Exception
*/
@Test
public void test_Delete() throws Exception{
// 获取dom对象
SAXReader saxReader = new SAXReader();
Document dom = saxReader.read(new FileReader("persons.xml"));
// 删除关羽的年龄
// 先获取关羽的节点
Element person = (Element) dom.selectSingleNode("//person[@address='天津']");
// 获取关羽下面的age节点
Node age = person.selectSingleNode("./age");
// 删除节点,用父节点删除子节点
person.remove(age);
// 保存xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
writer.write(dom);
writer.close();
}
执行结果(删除了关羽下面的年龄):

CURD的所有代码:
package com.xiaoshitou.test; import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test; /**
* 使用dom4j完成xml文件的CURD
* @author Beck
*
*/
public class TestXML {
/**
* 利用dom4j完成删除节点
* @throws Exception
*/
@Test
public void test_Delete() throws Exception{
// 获取dom对象
SAXReader saxReader = new SAXReader();
Document dom = saxReader.read(new FileReader("persons.xml"));
// 删除关羽的年龄
// 先获取关羽的节点
Element person = (Element) dom.selectSingleNode("//person[@address='天津']");
// 获取关羽下面的age节点
Node age = person.selectSingleNode("./age");
// 删除节点,用父节点删除子节点
person.remove(age); // 保存xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
writer.write(dom);
writer.close(); }
/**
* 利用dom4j完成修改元素的值
* @throws Exception
*/
@Test
public void test_Modify() throws Exception{
// 获取dom对象
SAXReader saxReader = new SAXReader();
Document dom = saxReader.read(new FileReader("persons.xml"));
// 将关羽的年龄改成38
Element age = (Element) dom.selectSingleNode("//person[@address='天津']/age");
age.setText("38"); // 保存xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
writer.write(dom);
writer.close();
} /**
* 利用dom4j完成查询元素,使用xpath技术查询
* @throws Exception
*/
@Test
public void test_Select() throws Exception{
// 获取dom对象
SAXReader saxReader = new SAXReader();
Document dom = saxReader.read(new FileReader("persons.xml"));
// 获取有 address="天津"属性的person标签
Node node = dom.selectSingleNode("//person[@address='天津']");
// 再获取 当前节点下面的name标签的值
List<Element> nameList = node.selectNodes("./name");
Element name = nameList.get(0);
String nameValue = name.getText();
// 打印的值为关羽
System.out.println(nameValue); } /**
* 利用dom4j完成新增一个xml文件
* @throws Exception
*/
@Test
public void test_Cread() throws Exception{
// 创建一个空的dom对象
Document dom = DocumentHelper.createDocument();
// 创建一个根标签 persons
Element root = dom.addElement("persons");
// 在root标签中添加一个子标签 person
Element person1 = root.addElement("person");
// 给person添加一个属性 address
person1.addAttribute("address", "上海");
// 添加子标签 name
Element name1 = person1.addElement("name");
name1.setText("张飞");
// 添加子标签 age
Element age1 = person1.addElement("age");
age1.setText("30"); // 创建另外一个person标签
Element person2 = root.addElement("person");
// 给person添加一个属性 address
person2.addAttribute("address", "天津");
// 添加子标签 name
Element name2 = person2.addElement("name");
name2.setText("关羽");
// 添加子标签 age
Element age2 = person2.addElement("age");
age2.setText("25"); // 保存xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
writer.write(dom);
writer.close();
}
}
java使用dom4j对XML进行CURD操作的更多相关文章
- dom4j解析XML的CURD操作
在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...
- Java使用dom4j读取xml时报错:org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence
1.Java使用dom4j读取xml时报错: org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of ...
- Java使用DOM4J对XML文件进行增删改查操作
Java进行XML文件操作,代码如下: package com.founder.mrp.util; import java.io.File; import java.util.ArrayList; i ...
- 【收藏用】--切勿转载JAVA 使用Dom4j 解析XML
原帖地址 : http://blog.csdn.NET/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1) ...
- JAVA 使用Dom4j 解析XML
[转自] http://blog.csdn.net/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1)下载 ...
- java使用dom4j解析xml文件
关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析.假如有如下xml: dom4j解析xml其实很简单,只要你有点java基础,知道xml文件.结合下面的xml文件和java代码, ...
- java 之 dom4j解析xml
*dom4j,是一个组织,针对xml解析,提供解析器dom4j *dom4j不是javase的一部分,想要使用需要导入dom4j提供的jar包 *第一步:创建lib文件夹,将压缩文件放到此处 *第二步 ...
- Java实现——Dom4j读写XML文件
1. dom4j概述 解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP. 最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义. 2. do ...
- Java中Dom4j解析XML
与利用DOM.SAX.JAXP机制来解析xml相比DOM4J表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml.dom4j是一 ...
随机推荐
- mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)
一. mysql错误日志:错误日志记录的事件:a).服务器启动关闭过程中的信息b).服务器运行过程中的错误信息c).事件调试器运行一个事件时间生的信息d).在从服务器上启动从服务器进程时产生的信息lo ...
- c++ thread
Either pthread_join(3) or pthread_detach() should be called for each thread,that an application crea ...
- 小白审计JACKSON反序列化漏洞
1. JACKSON漏洞解析 poc代码:main.java import com.fasterxml.jackson.databind.ObjectMapper; import com.sun.or ...
- ActiveMQ 学习第二弹
经历了昨天的初识 ActiveMQ,正好今天下班有点事耽搁了还没法回家,那就再学习会 ActiveMQ 吧!现在官网的文档没啥好看的了,毕竟是入门学习,太深奥的东西也理解不了.然后看官网上有推荐书籍& ...
- docker- 构建 oracle2c-r2(12.2.0.1) 的镜像
需求 由于公司要数据库需要使用新的oracle版本(12c-r2 ->12.2.0.1),需要从之前的oracle11g迁移到12c.所以,我们今天就先来介绍一下如何构建oracle12c的镜像 ...
- mysql基于binlog回滚工具_flashback(python版本)
update.delete的条件写错甚至没有写,导致数据操作错误,需要恢复被误操作的行记录.这种情形,其实时有发生,可以选择用备份文件+binlog来恢复到测试环境,然后再做数据修复,但是这样 ...
- ListView实现下拉刷新和上拉加载功能
1 public class RefreshListView extends ListView implements OnScrollListener { private View mHeaderVi ...
- fdisk 非交互式创建 分区
一. key 非交互式创建分区, 与 交互式创建分区区别不大. 使用 fdisk 的默认选项, 使用空行即可, 不用回车. 创建 主分区 和 扩展分区时, 需要注意 分区号 二. 创建主分区 fdis ...
- GitHub:多人协作下的分支处理
GitHub上的团队协作 远程信息 git remote:查看远程库的信息 git remote -v:查看远程库的详细信息 推送分支 git push origin 要推送的分支:比如git pus ...
- 关于MATLAB处理大数据坐标文件2017624
经过一个下午找资料,已作出人工轨迹记录程序,这样就可以增加样本容量 接下来三个方向:特征.决策树.机械轨迹程序 虽然机械轨迹的程序相对好做,但是现有机械轨迹程序太过于死板,不能自行更改轨迹