当前位置:网站首页>处理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也可以实现,比方说我们怎么知道里面都有什么方法呢,点进去源码,一看就知道了,这么多方法,我这里只是使用了基本的且常用的,大家多读源码,看了别人的源码对自己会有很大提升的:
在这里插入图片描述

小结

这里推荐大家去阅读这些工具类的源码,本身就是拼接封装,很简单可以好理解,比起框架源码还是比较简单的,首先阅读这些工具类源码还是比较简单的,最后,希望大家可以有所收获,那点个赞吧!

原网站

版权声明
本文为[学习日记]所创,转载请带上原文链接,感谢
https://blog.csdn.net/hello_list/article/details/124734969