要使用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操作的更多相关文章

  1. dom4j解析XML的CURD操作

    在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...

  2. 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 ...

  3. Java使用DOM4J对XML文件进行增删改查操作

    Java进行XML文件操作,代码如下: package com.founder.mrp.util; import java.io.File; import java.util.ArrayList; i ...

  4. 【收藏用】--切勿转载JAVA 使用Dom4j 解析XML

    原帖地址 : http://blog.csdn.NET/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1) ...

  5. JAVA 使用Dom4j 解析XML

    [转自] http://blog.csdn.net/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1)下载 ...

  6. java使用dom4j解析xml文件

    关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析.假如有如下xml: dom4j解析xml其实很简单,只要你有点java基础,知道xml文件.结合下面的xml文件和java代码, ...

  7. java 之 dom4j解析xml

    *dom4j,是一个组织,针对xml解析,提供解析器dom4j *dom4j不是javase的一部分,想要使用需要导入dom4j提供的jar包 *第一步:创建lib文件夹,将压缩文件放到此处 *第二步 ...

  8. Java实现——Dom4j读写XML文件

    1. dom4j概述 解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP. 最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义. 2. do ...

  9. Java中Dom4j解析XML

    与利用DOM.SAX.JAXP机制来解析xml相比DOM4J表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml.dom4j是一 ...

随机推荐

  1. Local模式下Spark程序只输出关键信息

    使用spark-submit提交local任务时,会输出很多Info信息: ------------------------------------------- Time: ms --------- ...

  2. v$session & v$session_wait

    (1)v$session v$session视图记录了当前连接到数据库的session信息 Column Description SADDR session address SID Session i ...

  3. JavaSE教程-02Java基本语法-思维导图

    思维导图看不清楚时: 1)可以将图片另存为图片,保存在本地来查看 2)右击在新标签中打开放大查看 1.注释 定义:用于解释说明程序作用的文字 注释类别 单行注释 格式: //注释文字 多行注释 格式: ...

  4. Hadoop集群搭建(非HA)

    1.准备Linux环境 1.0先将虚拟机的网络模式选为NAT 1.1修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=itcast ### ...

  5. oracle日志挖掘

    oracle日志挖掘是一种十分强大的数据恢复技术,只要你保障你的归档日志和重做日志是完整的,那么就可以将你的数据恢复到任何时刻.简单叙述一下日志挖掘的基本原理,然后进行一个简单的小实验. 日志挖掘时基 ...

  6. C# ftp 图片上传多快好省

    前言 此篇讲到的是图片上传功能,每个网站必定会有这样类似的功能,上传文件.上传图片等等.那么接下来,看看我们EF+uploadfile+ftp如何玩转上传图片吧 效果预览 具体实现 一个简单数据库 只 ...

  7. DDD理论学习系列(7)-- 值对象

    DDD理论学习系列--案例及目录 1.引言 提到值对象,我们可能立马就想到值类型和引用类型.而在C#中,值类型的代表是strut和enum,引用类型的代表是class.interface.delega ...

  8. [1] Report Fusioncharts

    图形报表之fusioncharts  

  9. 对js运算符“||”和“&&”的总结

    首先出个题: 如图: 假设对成长速度显示规定如下: 成长速度为5显示1个箭头: 成长速度为10显示2个箭头: 成长速度为12显示3个箭头: 成长速度为15显示4个箭头: 其他都显示都显示0各箭头. 用 ...

  10. css3自适应圆

    .class{ width:auto; height:auto; border-radius:11px; min-width:14px; padding:0 4px; font-size:12px; ...