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是一 ...
随机推荐
- 一天搞定HTML----列表标签03
1.细说列表标签 2.代码演示 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- JAVAEE学习——struts2_02:结果跳转方式、访问servletAPI方式、获得参数以及封装和练习:添加客户
一.结果跳转方式 <action name="Demo1Action" class="cn.itheima.a_result.Demo1Action" m ...
- cpp(第十四章)
1.类的静态成员变量.静态常整型(static const int)变量可以直接在类声明中初始化,静态常变量(static const )需要在类定义文件中初始化, 常变量(const )则在构造函数 ...
- 谈谈this对象
通过平常的使用简单总结了一下不同形式的函数调用下this的指向,函数的调用形式决定了this的指向.就简单分析一下以下几种情况: 情况一:纯粹的函数调用 eg: var x=1; function f ...
- orcle :Could not initialize "D:\app\Administrator\product\11.2.0\dbhome_1\bin\oci.dll" Make sure you have the 32 bits Oracle Client installed.
服务器重启后,数据库登录信息为空 错误信息: ---------------------------(Not logged on) - PL/SQL Developer---------------- ...
- NodeJS 实现手机短信验证 模块阿里大于
1,NodeJS 安装阿里大于模块 切换到项目目录使用npm 安装阿里于模块 npm i node-alidayu --save 2,aliyu官网使用淘宝账户登录 登录阿里大于 https://do ...
- 不小心用js重做了一遍贪吃蛇
贪吃蛇游戏想必没人会感到陌生,这个游戏的js版本在网上也是一搜一大把,今天我要介绍的仍然是如何用js做一个贪吃蛇游戏,但在关键一步,蛇的运动的实现上略有不同. 贪吃蛇的js版本通常用连续的方块元素来实 ...
- none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
本章开始讨论 Docker 网络. 我们会首先学习 Docker 提供的几种原生网络,以及如何创建自定义网络.然后探讨容器之间如何通信,以及容器与外界如何交互. Docker 网络从覆盖范围可分为单个 ...
- Testlink研究小结
1.Redmine与Testlink的关联 (1)redmine中的项目对应testlink的测试项目 (2)testllink执行用例时发现的问题可以记录到redmine中 2.Testlink优点 ...
- An impassioned circulation of affection
An impassioned circulation of affection time limit per test 2 seconds memory limit per test 256 mega ...