当前位置:网站首页>处理XML,dom4j的简单使用
处理XML,dom4j的简单使用
2022-08-09 13:10:00 【学习日记】
处理xml-dom4j的简单使用
前言
我们在日常使用中,我们知道前后端大多通过json文件进行交互,我们做配置文件通过xml或者json,可以看见这些格式的文件我们广泛运用,那相应的我们要会对这些文件进行解析处理,或者直接转换文件格式,上手使用,这里我们就简单了解下xml和json格式文件的使用;
xml
XML 指可扩展标记语言(eXtensible Markup Language)。

不管是xml还是json都是为了方便存储和传输,进行的一些格式化的格式;
导入依赖
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
不通过maven,这里依赖jar包,百度网盘链接:
链接:https://pan.baidu.com/s/1XH22FXPFY54hpamAvB2pcA?pwd=kp45
提取码:kp45
生成xml文件
两种方法:
1、我们只是靠字符串拼接可以生成xml语句,然后写入文件,这里就不用演示了
2、我们使用dom4j对象创建
这里大家都知道xml文件哈,这里多说无益直接上代码:
一个man对象:
package com.tongxunlu;
/** * @author 作者 :学习日记 * 类说明: man联系人实体类 */
public class Man {
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Man(String name, String phone) {
super();
this.name = name;
this.phone = phone;
}
public Man() {
super();
}
}
main方法测试:
// 产生下数据
List<Man> mans = new ArrayList<Man>();
for (int i = 0; i < 3; i++) {
Man man = new Man("学习日记", "27392189");
mans.add(man);
}
try {
// 第一步:创建一个Document实例
Document doc = DocumentHelper.createDocument();
// 第二步:先添加一个根结点,然后再添加子结点,构造成一个树形结构
Element root = doc.addElement("root");
Element peoples = root.addElement("peoples");
for (Man man : mans) {
// 创建一个个子节点
Element people = peoples.addElement("people").addText("people");
people.addElement("name").addText(man.getName());
people.addElement("phone").addText(man.getPhone());
//addElement("节点标签").addText("标签里的内容")
}
//这里产生带有属性的,但是这个很鸡肋,因为我们知道
//<man><name></name><age></age></man>
//像这样一个人的属性都可以这样写在man闭合标签里,就是man的属性,但是xml又有了属性这个概念
//我们可以完全不使用这样的内属性标签,反而还影响结构,当然了学就都学
for (Man man : mans) {
Element pElement = peoples.addElement("people");
pElement.addAttribute("name", man.getName());
pElement.addAttribute("phone", man.getPhone()).addText("内容");
}
// 第三步:添加xml文件样式(也可自定义样式),并输出xml文件到指定的路径下
// 这里使用默认样式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码格式
format.setEncoding("UTF-8");
// 使用XMLWriter通过流写入到test.xml文件
XMLWriter writer = new XMLWriter(new FileOutputStream(new File("test.xml")), format);
writer.write(doc);
System.out.println("文件产生成功");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
结果

我们可以看到文件生成成功

<?xml version="1.0" encoding="UTF-8"?>
<root>
<peoples>
<people>people
<name>学习日记</name>
<phone>27392189</phone>
</people>
<people>people
<name>学习日记</name>
<phone>27392189</phone>
</people>
<people>people
<name>学习日记</name>
<phone>27392189</phone>
</people>
<people name="学习日记" phone="27392189">内容</people>
<people name="学习日记" phone="27392189">内容</people>
<people name="学习日记" phone="27392189">内容</people>
</peoples>
</root>
读取xml文件
main方法测试:
List mans = new ArrayList();
// 第一步:创建一个SAXReader解析器 List mans=new ArrayList();
SAXReader reader = new SAXReader();
List<Man> mans = new ArrayList<Man>();
// 第一步:创建一个SAXReader解析器 List<Man> mans=new ArrayList<Man>();
SAXReader reader = new SAXReader();
// 第二步:解析xml文件,重新构建成一个Document对象
try {
Document doc = reader.read(new File("test.xml"));
// 第三步:处理Document对象信息,在控制台打印
// 1.获取文档的根节点.
Element root = doc.getRootElement(); // 2.取得某个节点的子节点.
Element peoples = root.element("peoples");
// Element people = peoples.element("people");
Iterator it = peoples.elementIterator();
while (it.hasNext()) {
Element people = (Element) it.next();
Man man = new Man();
if (people.element("name")!=null) {
man.setName(people.element("name").getText());
man.setPhone(people.element("phone").getText());
}else {
man.setName(people.attributeValue("name"));
man.setPhone(people.attributeValue("phone"));
}
mans.add(man);
}
System.out.println("姓名" + "\t" + "\t" + "电话");
for (Man man : mans) {
System.out.println(man.getName() + "\t" + "\t" + man.getPhone());
}
} catch (Exception e) {
e.printStackTrace();
}
结果

其实还有很多方法,大家可以去看源码,这里推荐大家去看源码其实都是对字符串的封装对象,如果不用它这个,我们自己写util也可以实现,比方说我们怎么知道里面都有什么方法呢,点进去源码,一看就知道了,这么多方法,我这里只是使用了基本的且常用的,大家多读源码,看了别人的源码对自己会有很大提升的:
小结
这里推荐大家去阅读这些工具类的源码,本身就是拼接封装,很简单可以好理解,比起框架源码还是比较简单的,首先阅读这些工具类源码还是比较简单的,最后,希望大家可以有所收获,那点个赞吧!
边栏推荐
- 利用信号灯和共享内存实现进程间同步通信
- The FPGA - work summary recently
- pyautogui的简单操作(2)-弹窗操作
- PO、DO、TO、VO、DO、DTO、DAO、POJO都是什么?
- RobotFramework 之 Evaluate
- NC193 二叉树的前序遍历
- NC40 链表相加(二)
- Realization of RTSP Protocol
- FFmpeg multimedia file processing (ffmpeg prints audio and video Meta information)
- GET POST PUT DELETE request in GIN
猜你喜欢

快来扔鸡蛋。

RTSP协议讲解

神经网络与深度学习(TensorFlow)

音频基础学习——声音的本质、术语与特性

Uni - app - uview Swiper shuffling figure component, click on the links to jump (click to get the item after the row data, remove data operation)

Map mixed density function and quantile added line
![行程和用户[阅读理解法]](/img/4b/77bba3c488b5410fdec5c3894c7421.png)
行程和用户[阅读理解法]

5G China unicom repeater network management protocol real-time requirements

现在40系显卡都快出来了,为何1060型号的显卡还有这么多人用?

RobotFramework 之 库与关键字
随机推荐
pytest 筛选用例
pytest 之 重运行机制与测试报告
pytest 之 fixture的定义及作用域
KMP方法
对百度的内容进行修改
Record the system calls and C library functions used in this project-2
NC192 二叉树的后序遍历
音频基础学习——声音的本质、术语与特性
Q_07 词汇表
Q_04_06 把它放在一起:传送
海康设备获取YV12图像-不用rtsp
Professor Chen Qiang's "Machine Learning and R Application" course Chapter 14 Assignment
ArcEngine(十)创建矢量图层
Final assignment of R language data analysis in a university
RobotFramework 之 RF变量与标准库关键字使用
从房产中介到程序员--80后张江男
glibc memory management model freeing C library memory cache
Realization of RTSP Protocol
Map mixed density function and quantile added line
npm install失败