八、Java-XML
1. XML的引入
1.1 XML是什么?
XML指可扩展标记语言。
1.2 XML的作用是什么?
XML是不作为的,XML不会做任何事情。XML被设计用来结构化、存储以及传输信息。它仅仅是纯文本而已。它仅仅将信息包装在XML标签中。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
2. 定义XML
1. 必须有声明语句。
XML声明是XML文档的第一句,其格式如下:
<?xml version="1.0" encoding="utf-8"?>
2. XML文档有且只有一个根元素
良好格式的XML文档必须有一个根元素,就是紧接着声明后面建立的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素。
3. 注意大小写
在XML文档中,大小写是有区别的。“A”和“a”是不同的标记。
4. 所有的标记必须有相应的结束标记
所有标记必须成对出现,有一个开始标记,就必须有一个结束标记,否则将被视为错误。
5. 属性值使用引号
所有属性值必须加引号(可以是单引号,也可以是双引号,建议使用双引号),否则将被视为错误。
6. XML中可以加入注释
注释格式:<!-- -->
3. 解析XML
DOM解析:需要使用工具dom4j
原理:
使用maven添加dom4j依赖:
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
解析XML的代码:
public class Test {public static void main(String[] args) {try {//读取XML:// 1. 创建一个xml解析器对象:(就是一个流)SAXReader sr = new SAXReader();// 2. 读取XML 文件(替换为实际路径),返回Document对象出来:Document dom = sr.read(new File("students.xml"));System.out.println(dom);//这里就相当于将整个文档封装为Document对象 dom:students.xml// 3. 获取根元素:(根节点只有一个)Element studentsEle = document.getRootElement();// students根元素// 4. 获取根节点下的多个子节点:Iterator<Element> it1 = studentsEle.elementIterator();//对students根元素进行遍历for (Element student : students) {// 处理每个学生节点processStudent(student);}} catch (Exception e) {e.printStackTrace();}}private static void processStudent(Element student) {// 获取属性String id = student.attributeValue("id");// 获取子元素的文本内容String name = student.elementText("name");String age = student.elementText("age");// 获取嵌套元素中的所有课程Element coursesElement = student.element("courses");List<Element> courses = coursesElement.elements("course");String coursesText = courses.stream().map(Element::getText).reduce((a, b) -> a + ", " + b).orElse("");} }