一.xml
1.xml是什么:指可扩展标记语言,被设计用来传输和存储数据,可以解决程序间数据传输的问题,也可以做配置文件,还可以充当小型的数据库
2.xml的标签可以自定义,但其命名方式需要注意以下几点 区分大小写;不能以数字开头;不能包含空格;名称中间不能包含冒号;如果标签之间需要间隔建议使用下划线
3.属性 属性值用双引号或者单引号进行分隔,一个元素可以有多个属性,特定的属性名称在同一个元素标记中只能出现一次,属性值不能包括&字符
4.CDATA节:有些内容不想让解析引擎执行,而是当做原始内容处理(即当做普通文本),可以用CADTA包括起来,CDATA节中的所有字符都会被当做简单文本,而不是xml标记 (除]]>其他都可以放) <![CDATA[文本内容]]]>
5.转义字符:&表示& <表示< >表示>
二.DOM4j
1.DOM4J用于对xml文件进行解析处理,可以对文件进行增删改查
2.下面是使用DOM4j的一些例子
bash
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.jupiter.api.Test;
import java.io.*;
import java.util.List;
public class Dom4j_ {
// 演示如何加载xml文件
@Test
public void loadXML() throws DocumentException {
//得到一个解析器
SAXReader reader = new SAXReader();
//看document的对象属性
Document document = reader.read(new File("src/main/java/students.xml"));
System.out.println(document);
}
@Test
//遍历所有的students信息
public void ListStus() throws DocumentException {
//1得到解析器
SAXReader reader = new SAXReader();
//2用解析器解析文件
Document document = reader.read(new File("src//main//java//students.xml"));
//3得到一个dom对象,得到根节点
Element rootElement = document.getRootElement();
//4得到根节点的students
List<Element> students = rootElement.elements();
System.out.println(students);
for (Element student : students) {
//获取student的下面的子元素
Element name = student.element("name");
Element age = student.element("age");
Element gender = student.element("gender");
System.out.println("名字是:" + name.getText() + "/t" + "性别是:" + age.getText() + "/t" + "年龄是:" + age.getText());
}
}
// 指定读取第一个学生的信息
@Test
public void readOne() throws DocumentException {
//得到一个解析器
SAXReader reader = new SAXReader();
//看document的对象属性
Document document = reader.read(new File("src/main/java/students.xml"));
Element rootElement = document.getRootElement();
//拿到根节点下的学生的信息
List<Element> students = rootElement.elements("student");
Element student = (Element) students.get(0);
//输出学生的信息
Element name = student.element("name");
Element age = student.element("age");
Element gender = student.element("gender");
System.out.println(name.getText() + "\t" + age.getText() + "\t\t" + gender.getText());
System.out.println(student.attributeValue("id"));
}
//添加一个学生的信息
@Test
public void Student1() throws DocumentException {
///得到一个解析器
SAXReader Reader = new SAXReader();
//返回一个dom对象
Document document = Reader.read(new File("src/main/java/students.xml"));
//拿到根元素
Element rootElement = document.getRootElement();
//得到学生信息
List<Element> elements = rootElement.elements();
for (Element student : elements) {
//得到student下的元素
Element name = student.element("name");
System.out.println(name.getText());
}
}
//添加节点
@Test
public void addStudent() throws DocumentException, IOException {
//得到解析器
SAXReader saxReader = new SAXReader();
//得到一个由文件解析成的dom对象,读取文件
Document read = saxReader.read(new File("src/main/java/students.xml"));
//得到dom对象的根元素
Element rootElement = read.getRootElement();
//创建一个学生对象
Element newStu = DocumentHelper.createElement("student");
//给元素添加属性
newStu.addAttribute("id", "04");
//给学生对象赋予子元素
Element newStu_name = DocumentHelper.createElement("name");
Element newStu_age = DocumentHelper.createElement("age");
Element newStu_gender = DocumentHelper.createElement("gender");
Element newStu_resume = DocumentHelper.createElement("resume");
newStu_name.setText("宋江");
newStu_age.setText("23");
newStu_gender.setText("男");
newStu_resume.setText("大好人");
//把子元素挂载到newStu上
newStu.add(newStu_name);
newStu.add(newStu_age);
newStu.add((newStu_gender));
newStu.add(newStu_resume);
//再把newStu加入到根节点
rootElement.add(newStu);
//直接输出会有中文乱码
OutputFormat output = OutputFormat.createPrettyPrint();
output.setEncoding("utf-8");
//将xml文件更新
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/main/java/students.xml"));
xmlWriter.write(read);
xmlWriter.close();
}
//删除节点
@Test
public void delete() throws DocumentException, IOException {
//得到解析器
SAXReader saxReader = new SAXReader();
//得到一个由文件解析成的dom对象,读取文件
Document read = saxReader.read(new File("src/main/java/students.xml"));
//得到dom对象的根元素
Element rootElement = read.getRootElement();
//找到根元素下的第一个学生
Element student = (Element)rootElement.elements("student").get(0);
//找到该元素的父元素,然后用父元素删除子元素
student.getParent().remove(student);
//更新xml内容
//直接输出会有中文乱码
OutputFormat output = OutputFormat.createPrettyPrint();
output.setEncoding("utf-8");
//将xml文件更新
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/main/java/students.xml"));
xmlWriter.write(read);
xmlWriter.close();
}
}