要使用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. Unity游戏程序员面试题及解答

    典型的一些如手写排序算法.一些基本数学问题,在此就不列举了.以下整理出一些代表性的.有参考价值的题,真实面试题,附有本人的解答,欢迎讨论. 题1.指出下列哪些属于值类型? int System.Obj ...

  2. iOS安全攻防之代码混淆

    iOS 代码安全之代码混淆实践: 前言: 在8月份的时候写了个关于 class-dump 反编译的文章(使用 Class-dump 反编译),利用 class-dump 工具可以反编译出工程的头文件, ...

  3. CTF 和 PHP ,数据库

    引言 接触CTF 差不多一个月了,网上题目刷得也差不多,做了不少笔记,老想总结一下.当然,这种文章网上多得是. 正文笔记 少不了弱类型,松散比较,放一张图 2.  mysql_real_escape_ ...

  4. nodeJS之路径PATH模块

    前面的话 path模块包含一系列处理和转换文件路径的工具集,通过 require('path') 可用来访问这个模块.本文将详细介绍path模块 路径组成 [path.dirname(p)] 返回路径 ...

  5. 一天搞定HTML----标签的嵌套规则06

    标签的嵌套规则 代码演示 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  6. JavaScript实现上传图片预览[js前端实现]

    <body> <input type="file" id="file_input" onchange="show_image()&q ...

  7. M41T11-RTC(实时时钟)

    一.理论准备 1. 主要器件:STM8单片机.M41T11时钟IC.32.768kHz晶振等. 2. 外围设备:烧录工具ST-Link/v2.串口.5v供电SATA线. 3. 主要思想:通过单片机对时 ...

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

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

  9. JS键盘事件对象之keyCode、charCode、which属性对比

    先说一些有关键盘事件的事项:用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown. onkeypress和onkeyup这 ...

  10. AngularJS高级程序设计读书笔记 -- 过滤器篇

    一. 过滤器基础 过滤器用于在视图中格式化展现给用户的数据. 一旦定义过滤器之后, 就可在整个模块中全面应用, 也就意味着可以用来保证跨多个控制器和视图之间的数据展示的一致性. 过滤器将数据在被指令处 ...