java dom4j 增删改查[通俗易懂]

java dom4j 增删改查[通俗易懂]packagecn.itcast.dom4j;importjava.io.FileOutputStream;importjava.io.OutputStream;importjava.util.List;importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.Document

大家好,又见面了,我是你们的朋友全栈君。

package cn.itcast.dom4j;

import java.io.FileOutputStream;
import java.io.OutputStream;
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.Assert;
import org.junit.Test;


public class Dom4JDemo {
//	1、得到某个具体的节点内容:第2本书的作者
	@Test
	public void test1() throws Exception{
		//得到Document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/book.xml");
		//得到根元素
		Element root = document.getRootElement();
		//依次得到第2本书的作者
		List<Element> es = root.elements("书");
		Element e = es.get(1);
		Element author = e.element("作者");
		//拿到内容打印输出
//		System.out.println(author.getText());
		Assert.assertEquals("毕向东", author.getText());
	}
	@Test
	public void test11() throws Exception{
		//得到Document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/book.xml");
		
		String xpath = "//书[2]/作者";
		Node author = document.selectSingleNode(xpath);
		
		//Assert.assertEquals("毕向东", author.getText());
	}
//	2、遍历所有元素节点:
	@Test
	public void test2() throws Exception{
		//得到Document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/book.xml");
		//得到根元素
		Element root = document.getRootElement();
		treeWalk(root);//遍历所有的元素,打印他的名称
	}
	private void treeWalk(Element root) {
		System.out.println(root.getName());
		List<Element> es = root.elements();
		for(Element e:es){
			treeWalk(e);
		}
	}
//	private void treeWalk(Element root){
//		System.out.println(root.getName());
//		//节点的数量
//		int count = root.nodeCount();
//		for(int i=0;i<count;i++){
//			Node node = root.node(i);//取索引上节点
//			if(node.getNodeType()==Node.ELEMENT_NODE){
//				treeWalk((Element)node);
//			}
//		}
//	}
	
//	3、修改某个元素节点的主体内容:修改第2本书的售价
	@Test
	public void test3() throws Exception{
		//得到Document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/book.xml");
		//得到根元素
		Element root = document.getRootElement();
		//得到第2本书的售价
		Element secondBook = (Element) root.elements().get(1);
		Element secondBookPrice = secondBook.element("售价");
		//设置主体内容
		secondBookPrice.setText("8.00");
		//写回XML文档
		OutputStream out = new FileOutputStream("src/book.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
//		format.setEncoding("UTF-8");//指定编码:这是默认编码
		XMLWriter writer = new XMLWriter(out, format);
		writer.write(document);
		writer.close();
	}
//	4、向指定元素节点中增加子元素节点:给第1本书添加批发价
	@Test
	public void test4()throws Exception{
		//得到Document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/book.xml");
		//得到根元素
		Element root = document.getRootElement();
		
		//找到第1本书:直接添加新元素
		Element firstBook = root.element("书");
		firstBook.addElement("批发价").setText("1");
		
		
		//写回XML文档
		OutputStream out = new FileOutputStream("src/book.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
//		format.setEncoding("UTF-8");//指定编码:这是默认编码
		XMLWriter writer = new XMLWriter(out, format);
		writer.write(document);
		writer.close();
	}
//	5、向指定元素节点上增加同级元素节点:在第一本书的售价前面添加内部价
	@Test
	public void test5()throws Exception{
		//得到Document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/book.xml");
		//得到根元素
		Element root = document.getRootElement();
		
		//找到第1本书
		Element firstBook = root.element("书");
		//得到第1本书的所有子元素:List
		List<Element> children = firstBook.elements();
		//借助DocumentHelper创建内部价元素
		Element price = DocumentHelper.createElement("内部价");
		price.setText("99");
		//挂接到老3的位置上
		children.add(2, price);
		
		//写回XML文档
		OutputStream out = new FileOutputStream("src/book.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
//		format.setEncoding("UTF-8");//指定编码:这是默认编码
		XMLWriter writer = new XMLWriter(out, format);
		writer.write(document);
		writer.close();
	}
//	6、删除指定元素节点:删除批发价
	@Test
	public void test6()throws Exception{
		//得到Document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/book.xml");
		//得到根元素
		Element root = document.getRootElement();
		
		//找到第1本书
		Element firstBook = root.element("书");
		
		//自己不能删自己
		Element price = firstBook.element("批发价");
		firstBook.remove(price);
		
		
		//写回XML文档
		OutputStream out = new FileOutputStream("src/book.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
//		format.setEncoding("UTF-8");//指定编码:这是默认编码
		XMLWriter writer = new XMLWriter(out, format);
		writer.write(document);
		writer.close();
	}
//	7、操作XML文件属性:第1本书添加一个出版社属性
	@Test
	public void test7()throws Exception{
		//得到Document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/book.xml");
		//得到根元素
		Element root = document.getRootElement();
		
		//找到第1本书
		Element firstBook = root.element("书");
		
		firstBook.addAttribute("出版社", "传智播客");
		
		
		//写回XML文档
		OutputStream out = new FileOutputStream("src/book.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
//		format.setEncoding("UTF-8");//指定编码:这是默认编码
		XMLWriter writer = new XMLWriter(out, format);
		writer.write(document);
		writer.close();
	}
	//获取第一本书的出版社属性值
	@Test
	public void test8()throws Exception{
		//得到Document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/book.xml");
		//得到根元素
		Element root = document.getRootElement();
		
		//找到第1本书
		Element firstBook = root.element("书");
		
		String value = firstBook.attributeValue("出版社");
		Assert.assertEquals("传智播客", value);
		
		
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159408.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月14日 下午11:36
下一篇 2022年7月14日 下午11:46


相关推荐

  • 电商新宠—广告电商,转化产品的流量聚体地「建议收藏」

    电商新宠—广告电商,转化产品的流量聚体地「建议收藏」现在市面上通过看广告赚点零花钱的项目也是片地一把抓,在各大平台看广告,间接给平台赚钱,却不能给自己带来一些好处;而真正的并没有让消费者能长期的去坚持去做,一个月下来看广告收益也就十多二十元块钱,使大多数平台变得暗淡下去,最后无人问津。目前又听说在市面上流传了一个很火热的广告变现模式——广告电商,结合了“社交电商+广告分佣”,通过在平台购买商品,赠送同等或者一定量的积分,达到不同的门槛,可以根据不同的积分门槛看不同的广告(每天3分钟),实现广告变现,提现到微信、支付宝和对接的第三方支付服务平台。最终实现广告主

    2022年6月22日
    39
  • android listview 滑动卡顿问题解决

    android listview 滑动卡顿问题解决之前在使用listview进行每次通知一来,根据判断是否有这个标志,就更新listview所绑定的数据源,通知更新priceAd.notifyDataSetChanged();,也用了网上的建议使用viewHolder进行listview的item复用机制,但还是会出现卡顿的现象,经过分析,原来是listview的item布局嵌套太多,导致刷新的时候,重绘过多,造成卡顿的现象,以下是另一片博客的分

    2022年7月22日
    16
  • Python 命名规则

    Python 命名规则详情描述命名规则 1 项目工程名 首字母大写 大写式驼峰 ProjectName 即可理解 单词首字母大写 组合线驼峰 2 包名和模块名 全部小写 下划线驼峰 from 包或模块名 import 包或类或函数名 from 包 import 模块 from 模块 import 该模块的类即可理解 全部小写 下划线驼峰 3 文件名 全部小写 下划线驼峰即可理解 全部小写 下划线驼峰 4 类名 类名使用大小驼峰 TestCase 命名风格 首字母

    2026年3月18日
    3
  • 单点登录sso的实现原理(单点登录原理)

    什么是单点登录一个账户在多个系统上实现单一用户的登录为什么用单点登录单点登录可以做到在不记录用户密码的情况下,实现不同系统之间的资源共享,自动登录不安全,单点登录,一处登录,处处都可用,不用做多余的登录操作引用一个很经典的案例比如现在有OA系统、门户系统、人力资源管理系统、档案管理系统、生产管理系统、xx系统等,这么多个系统在一个公司里面,如果一个用户需要使用这么多个系统,那每天都要登录…

    2022年4月14日
    46
  • C++按位异或运算符

    C++按位异或运算符参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0,1^0=1,0^1=1,1^1=0例如:10100001^00010001=101100000^0=0,0^1=10异或任何数=任何数1^0=1,1^1=01异或任何数-任何数取反 任何数异或自己=把自己置0(1)按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和

    2022年5月20日
    52
  • sql调用存储过程exec用法_sqlserver存储过程执行日志

    sql调用存储过程exec用法_sqlserver存储过程执行日志一、【存储过程】存储过程的T-SQL语句编译以后可多次执行,由于T-SQL语句不需要重新编译,所以执行存储过程可以 提高性能。存储过程具有以下特点:• 存储过程已在服务器上存储• 存储过程具有安全特性• 存储过程允许模块化程序设计• 存储过程可以减少网络通信流量• 存储过程可以提高运行速度 存储过程分为用户存储过程、系统存储过程和扩展存储过程。存储过程Procedure是一组为了完成…

    2022年8月18日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号