欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java使用dom4j操作XML增删改查-超简洁

程序员文章站 2024-02-01 18:01:28
一、前言 1、使用工具:eclipse 环境:JDK-11 2、类说明:共四个类:Zen | Shan | Gai | Cha (一个类只做一件事,简单明了) 3、引用jar包:dom4j-1.6.1.jar 4、反馈方式:邮箱 xiang.jia.kang147@Gmail.com 5、使用的源X ......

一、前言

1、使用工具:eclipse    环境:jdk-11

2、类说明:共四个类:zen   |  shan  |   gai   |   cha   (一个类只做一件事,简单明了)

3、引用jar包:dom4j-1.6.1.jar

4、反馈方式:邮箱 xiang.jia.kang147@gmail.com

5、使用的源xml名为:humen.xml  内容如下

java使用dom4j操作XML增删改查-超简洁

 

 

二、源码

1、在源xml基础上添加新的 节点、属性、文本内容

/**
* 作者:向家康
* 版权所有 禁止转发
*/
package 正式版.xml.增删改查;

import java.io.filewriter;
import org.dom4j.document;
import org.dom4j.element;
import org.dom4j.io.outputformat;
import org.dom4j.io.saxreader;
import org.dom4j.io.xmlwriter;

/**
* 创作于 2019年9月23日 下午10:32:48
* 此类描述: xml 添加节点 属性 文本内容
*/
public class zen {
public static void main(string[] args) throws exception {


document doc = new saxreader().read("src/正式版/xml/增删改查/humen.xml");

element root = doc.getrootelement();//得到根节点

element san = root.addelement("hum");//用根节点root创建一个hum节点           -- 添加节点
element name = san.addelement("name");//给新的hum创建子节点 name和age --添加子节点
element age = san.addelement("age");

name.addattribute("id", "003");//给name附上属性和属性值    --添加属性
name.settext("老胡");//设置name标签内文本内容        --添加文本
age.settext("20");//设置age标签内文本内容


//这里是保存路径相同相当于是更新内容 (文档有变动都需要此操作)
outputformat format = new outputformat();
format.setencoding("utf-8");
xmlwriter writer = new xmlwriter(new filewriter("src/正式版/xml/增删改查/humen.xml"),format); 
writer.write(doc);
writer.close();
system.out.println("添加节点成功!!");
}
}

 

 

2、在源xml基础上 删除指定 节点、属性、文本内容

/**
* 作者:向家康
* 版权所有 禁止转发
*/
package 正式版.xml.增删改查;

import java.io.filewriter;
import java.util.list;
import org.dom4j.attribute;
import org.dom4j.document;
import org.dom4j.element;
import org.dom4j.io.outputformat;
import org.dom4j.io.saxreader;
import org.dom4j.io.xmlwriter;

/**
* 创作于 2019年9月23日 下午10:33:04
* 此类描述: xml删除 指定 节点 属性 文本
*/
public class shan {

public static void main(string[] args) throws exception {

document doc = new saxreader().read("src/正式版/xml/增删改查/humen.xml");//得到文档

element root = doc.getrootelement();//得到根节点

list<element> list = root.elements();//得到根节点下的所有儿子节点【hum】

//删节点操作
element h= list.get(2).element("name");//通过第三个hum,找到name节点
h.detach();//删除第三个hum中的name节点(精确删节点)

element h2= list.get(2);//得到第三个hum节点
h2.detach();// 删除第三个hum节点--删整个节点(诛九族)

//删属性操作 (一般不会删属性值保留属性的,如有此需求,直接修改属性值为空就好了)
attribute arr = h.attribute("id");//从孙子name脑壳上找到id属性
arr.detach();//删除这个 id==003             

//第二种方式 通过父节点调用remove() 可以删子节点 属性 文本 怎么方便怎么用


//这里是保存,路径相同相当于是更新内容
outputformat format = new outputformat();
format.setencoding("utf-8");
xmlwriter w = new xmlwriter(new filewriter("src/正式版/xml/增删改查/humen.xml"),format);
w.write(doc);
w.close();
system.out.println("成功");
}
}

3、在源xml基础上 修改指定 节点名、属性值、文本内容

/**
* 作者:向家康
* 版权所有 禁止转发
*/
package 正式版.xml.增删改查;

import java.io.filewriter;
import java.util.list;
import org.dom4j.attribute;
import org.dom4j.document;
import org.dom4j.element;
import org.dom4j.io.outputformat;
import org.dom4j.io.saxreader;
import org.dom4j.io.xmlwriter;

/**
* 创作于 2019年9月23日 下午10:33:14
* 此类描述: 修改 节点名 属性值 文本内容
*/
public class gai {

public static void main(string[] args) throws exception {

document doc = new saxreader().read("src/正式版/xml/增删改查/humen.xml");//得到文档对象

element root = doc.getrootelement();//得到根节点

list<element> list = root.elements();//得到根节点下的所有儿子节点【hum】

element h= list.get(2).element("name");//通过第三个hum,找到name节点
h.setname("666");//修改节点名称

attribute arr = h.attribute("id");//从name节点找到id属性
arr.setvalue("055");//修改id为055 -修改属性(一般不会修改属性名保留属性值,可删除属性添加属性来实现)

element h2 = list.get(2).element("age");//得到老胡年龄
h2.settext("18");//修改age为18 -修改内容


//这里是保存,路径相同相当于是更新内容
outputformat format = new outputformat();
format.setencoding("utf-8");
xmlwriter w = new xmlwriter(new filewriter("src/正式版/xml/增删改查/humen.xml"),format);
w.write(doc);
w.close();
system.out.println("成功");
}
}

4、在源xml基础上 查询指定 节点名、属性及属性值、文本内容

/**
* 作者:向家康
* 版权所有 禁止转发
*/
package 正式版.xml.增删改查;

import java.io.file;
import java.util.list;

import org.dom4j.attribute;
import org.dom4j.document;
import org.dom4j.documenthelper;
import org.dom4j.element;
import org.dom4j.node;
import org.dom4j.io.saxreader;

/**
* 创作于 2019年9月23日 下午10:33:27
* 此类描述: 查询 节点名  节点属性和属性值  文本内容
*/
public class cha {

public static void main(string[] args) throws exception {

document doc = new saxreader().read(new file("src/正式版/xml/增删改查/humen.xml"));

element root = doc.getrootelement();//得到根节点

list<element> e = root.elements();//得到子节点全体

for(int i=0;i<e.size();i++) {
system.out.println("第"+(i+1)+"节点名"+e.get(i).getname());
}

//得到第一个hum里面的 子节点名 属性 属性 (为了打印好看才调getname,增删改时不用调)
element n = e.get(0).element("name");//得到第一个hum节点中的name节点
element n2 = e.get(0).element("age");//得到第一个hum节点中的age节点

system.out.print("节点名:"+n.getname());

attribute d = n.attribute("id"); //多个属性时使用集合 list<attribute> d = n.attributes(); 再遍历

system.out.print(" 属性:"+d.getname()+" 属性值:"+d.getvalue());

system.out.println("\n\tname 内容:"+n.gettext()+" age 内容:"+n2.gettext());

//方式二 xpath 路径语言 此文暂不呈上,见谅,本文面向大众。
}
}

查询结果:

java使用dom4j操作XML增删改查-超简洁

 

 

源码可以直接粘贴使用,

但注意删改的时候,不要直接运行,

比如删了某元素,后面改和查可能找不到了节点了报错

建议:看明白了,再操作。