dom4j解析XML文件学习笔记

dom4j解析XML文件学习笔记
dom4j中的四个关键类
  • Document 整个文档对象类
  • Element 标签对象类
  • Attribute 属性对象类
  • Text 文本对象类
XML文件结构

在这里插入图片描述

dom4j解析XML文件
  • 获取解析器对象
SAXReader reader = new SAXReader();
  • 读取XML文件,生成Document对象。
Document document = reader.read(Test.class.getClassLoader().getResource("contact.xml"));
// 或者
Document document2 = reader.read("E:\\dom4j\\src\\main\\resources\\contact.xml");
Document document3 = reader.read(new FileInputStream("E:\\dom4j\\src\\main\\resources\\contact.xml"));

,读取的方式有很多,read方法中的参数可以是文件路径,也可以是一个输入流。,最终返回一个Document对象。

  • 获取根标签对象
Element rootElem = document.getRootElement();

因为XML文件规定有且仅能有一个根标签,因此这个方法不用传任何参数,最终返回的是一个Element对象,即标签对象。

获取到根标签,就可以依次获取到根标签下的所有标签,进而进行增删改查。

获取xml文件中的子标签信息

主要有两个方法:

// 获取到根标签
Element rootELem = document.getRootElement();

// 获取根标签下名称为contact的子标签,默认是第一个
Element conElem = rootELem.element("contact");

//获取到根标签下的所有名称为contact的子标签,最终返回一个List集合。
List<Element> list = rootELem.elements("contact");
根据标签对象获取属性对象与属性值

主要有两个方法

  // 获取到属性名称为id的属性对象
 Attribute attribute = conElem.attribute("id");
 
 // 根据属性对象获取属性值,两个方法都可以获取到
 System.out.println(attribute.getData());
 System.out.println(attribute.getValue());
根据标签对象获取文本内容(好像不能获取到Text文本对象)
// 获取到标签名称为name的标签对象
Element nameElem = conElem.element("name");

// 通过标签对象获取文本内容(包括空格和换行)
System.out.println(nameElem.getText());

//  通过标签对象获取文本内容(去除空格和换行)
System.out.println(nameElem.getTextTrim());

向XML文件中添加标签

调用addElement方法,最终返回的是添加的标签的标签对象。

Element contactElem = element.addElement("contact");
Element nameElem = contactElem.addElement("name");
Element genderElem = contactElem.addElement("gender");
Element phoneElem = contactElem.addElement("phone");
Element addressElem = contactElem.addElement("address");
Element emailElem = contactElem.addElement("email");
向添加的标签中设置属性

addAttribute()可以同时添加属性,并且设置属性值

contactElem.addAttribute("id",id);
向添加的标签中设置文本内容

调用addText方法即可

nameElem.addText(name);
genderElem.addText(gender);
phoneElem.addText(phone);
emailElem.addText(email);
addressElem.addText(adders);

虽然向XML文件中已经添加了标签,并且set了响应的属性和文本内容,但这仅仅是在内存中生效,若想长期保留需要将更改后的文件覆盖之前的xml文件。

将更改后的xml文件写回硬盘。

需要用到另一个类XMLWriter。类里面有一个write方法可以将Document对象写回硬盘。

// 创建XNLWriter对象,参数为一个字节输出流,还可以指定格式
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("E:\\test.xml"),format);

// 两种格式随意选择
OutputFormat format = OutputFormat.createPrettyPrint();   // 优雅格式
OutputFormat format1 = OutputFormat.createCompactFormat();  // 紧凑格式,变成一行

唯有这样,对XML文件的修改,在程序结束之后,才可以继续生效。

根据标签对象修改文本内容

标签对象调用set Text()方法即可。

Element conElem = rootELem.element("contact");
conElem.setText("123");
根据标签对象修改属性内容

不能直接通过标签对象修改属性内容,需要先获取到属性对象进而调用setValue方法

Element conElem = rootELem.element("contact");
Attribute attribute = conElem.attribute("id");
attribute.setValue("007");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值