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");