当前位置: 首页 > news >正文

34、Java——一个案例学会Dom4j解析技术对XML文件的增删改查

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:乐趣国学的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:一个案例学会Dom4j解析技术对XML文件的增删改查

案例

使用Dom4j解析技术实现对animal.xml文件进行增删改查操作。

链接: dom4j包下载
将dom4j的jar包导入到项目中,然后build path后使用。
解析XML文档
读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。

初始化animal.xml文件数据:

<animal>
	<dog>
		<name>旺财</name>
		<age>3</age>
	</dog>
	
	<cat>
		<name>tom</name>
		<age>2</age>
	</cat>
</animal>

创建“增删改查”操作类:Dom4jXMLMgr类

导包

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

创建Document对象

	public static Document doc;

将xml文件转换成Document对象;其中,saxReader的read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取。得到的Document对象就代表了整个XML。
根据本人自己的经验,读取的字符编码是按照XML文件头定义的编码来转换。如果遇到乱码问题,注意要把各处的编码名称保持一致即可。

	public static void loadDocument() {
		try {
			SAXReader saxReader = new SAXReader();
			doc = saxReader.read(new File("animal.xml"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

每一次操作后保存xml

	public static void saveXML(String path) {
		try {
			OutputFormat format = OutputFormat.createPrettyPrint();
			// 指定XML编码
			format.setEncoding("GBK");
			XMLWriter writer;
			writer = new XMLWriter(new FileWriter(path), format);
			writer.write(doc);
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

取得Root节点
读取后的第二步,就是得到Root节点。熟悉XML的人都知道,一切XML分析都是从Root元素开始的。
向animal.xml文件中增加数据

	public static void addNewAnimalInfo() {
		// 获取XML的根节点
		Element root = doc.getRootElement();
		// 创建新的动物标签:pig
		Element el = root.addElement("pig");
		// 创建name标签
		Element nameEl = el.addElement("name");
		// 给name标签添加文本信息
		nameEl.addText("佩奇");
		// 创建age标签
		Element ageEl = el.addElement("age");
		// 给age标签设置文本信息
		ageEl.addText("4");
		saveXML("animal.xml");
	}

从animal.xml文件中删除数据

	public static void deleteAnimalInfo(String animalText) {
		// 获取XML的根节点
		Element root = doc.getRootElement();
		int id = 0;
		for (Iterator animal = root.elementIterator(); animal.hasNext();) {
			Element theAnimal = (Element) animal.next();
			if (theAnimal.getName().equals(animalText)) {
				theAnimal.getParent().remove(theAnimal);
			}
		}
		saveXML("animal.xml");
	}

从animal.xml文件中修改数据

	public static void updateAnimalInfo(String animalText2, String property,
			String propertyValue) {
		// 获取XML的根节点
		Element root = doc.getRootElement();
		int id = 0;
		for (Iterator animal = root.elementIterator(); animal.hasNext();) {
			Element theAnimal = (Element) animal.next();
			// 判断当前动物和传过来的动物是不是一个,满足则修改并退出循环
			if (theAnimal.getName().equals(animalText2)) {
				// 遍历每个动物标签
				for (Iterator oneAnimal = theAnimal.elementIterator(); oneAnimal
						.hasNext();) {
					Element type = (Element) oneAnimal.next();
					if (type.getName().equals(property)) {
						//设置新的属性值
						type.setText(propertyValue);
					}
				}
			}
		}
		saveXML("animal.xml");
	}

查询animal.xml文件中所有的动物数据

	public static void showAnimalInfo() {
		// 获取XML的根节点
		Element root = doc.getRootElement();
		// 遍历所有的动物标签
		for (Iterator animal = root.elementIterator(); animal.hasNext();) {
			Element theAnimal = (Element) animal.next();
			// 输出标签的name属性
			System.out.println("动物:" + theAnimal.getName());
			// 遍历每个动物标签
			for (Iterator oneAnimal = theAnimal.elementIterator(); oneAnimal
					.hasNext();) {
				Element type = (Element) oneAnimal.next();
				// 输出标签的name属性
				System.out.println(type.getName() + ":" + type.getText());
			}
			System.out.println("********************");
		}
		System.out.println("----------当前操作所有数据----------");
	}
}

创建测试类:Dom4jXMLTest类

导包:键盘输入数据,用Scanner;

	Scanner sc = new Scanner(System.in);

初始化,将xml保存到Document对象里。
Dom4jXMLMgr.loadDocument();

查询所有动物
Dom4jXMLMgr.showAnimalInfo();

增加数据
Dom4jXMLMgr.addNewAnimalInfo();

查询所有动物
Dom4jXMLMgr.showAnimalInfo();

删除数据
System.out.println(“请输入需要删除的动物(如dog,cat等):”);
String animalText1 = sc.next();
Dom4jXMLMgr.deleteAnimalInfo(animalText1);

查询所有动物
Dom4jXMLMgr.showAnimalInfo();

修改数据
System.out.println(“请输入需要修改的动物(如dog,cat等):”);
String animalText2 = sc.next();
System.out.println(“请输入需要修改的属性(name/age):”);
String property = sc.next();
System.out.println(“请输入新的属性值:”);
String propertyValue = sc.next();
Dom4jXMLMgr.updateAnimalInfo(animalText2, property, propertyValue);

查询所有动物
Dom4jXMLMgr.showAnimalInfo();

在这里插入图片描述

相关文章:

  • 做网站要学什么知识/seo百度贴吧
  • 网站设计 知识产权/南宁网站优化公司电话
  • 网站推广到底应该怎么做/百度关键词搜索怎么弄
  • 网站开通支付宝支付/中囯军事网
  • 如何做网站公司名seo/seo培训
  • 建设工程材料网站/如何做网站平台
  • 【数值模型系列】WPS概述
  • “Flash闪存”基础 及 “SD NAND Flash”产品的测试
  • JUC实战经验-CompletableFuture 异步编程利器
  • Java简系 - Java入门「一」
  • 清华学姐三年的测试成长经历,到最后的喜提高薪offer
  • 【软考】-- 多媒体基础知识
  • 关于ETL的两种架构(ETL架构和ELT架构)
  • ClickHouse 挺快,esProc SPL 更快
  • 【Error: error:0308010C:digital envelope routines::unsupported】
  • Spring Boot中Spring MVC的基本配置讲解与实战(包括静态资源配置,拦截器配置,文件上传配置及实战 附源码)
  • 第八章、ansible基于清单管理大项目
  • C语言学习笔记