XML

XML

XML(Extensible Markup Language)可扩展标记语言

  • XML允许自定义格式
  • XML在基本语法规范的前提下,第三方程序和框架会通过XML约束的方式强制规定配置文件中可以写什么和怎么写

常见配置文件类型

  • properties文件,例如druid连接池就是使用properties文件作为配置文件
  • XML文件,例如Tomcat就是使用XML文件作为配置文件
  • YAML文件,例如Spring Boot就是用YAML作为配置文件
  • json文件,通常作为文件传输,也可以用来作前端或移动端的配置文件

XML的书写规范和约束

  • 根标签只能有一个
  • 第一行永远都是<?xml version="1.0" encoding="UTF-8"?> 前面没有别的东西
  • xml有约束,约束用于限定XML内部能编写的内容
    • dtd 简单 上手快 约束没有schema细致
    • schema 复杂 上手慢 约束要比dtd细致

使用DOM4J进行XML解析

DOM4J是java用来解析XML文件的工具jar包

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jdbc>
    <dev>
        <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
        <url>jdbc:mysql://192.168.2.2:3306/xiaobai</url>
        <username>root</username>
        <password>Zhuwenxue2002</password>
    </dev>
    <test>
        <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
        <url>jdbc:mysql:///xiaobai</url>
        <username>root</username>
        <password>123456</password>
    </test>
</jdbc>
package com.xiaobai.xml;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class Dom4jTest {
    @Test
    public void testDom4j() throws Exception {
        SAXReader reader = new SAXReader();
        InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("jdbc.xml");
        Document read = reader.read(resourceAsStream);
        //此read对象就是一颗Dom树,其访问节点,属性,文本的方法与DOM语法相同

        //以下代码是遍历该Dom树
        Element rootElement = read.getRootElement();//获取根节点
        System.out.println(rootElement.getName());
        List<Element> elements = rootElement.elements();//获取根节点下所有子节点
        for (Element element : elements) {
            System.out.println("\t" + element.getName());//遍历子节点
            List<Element> elements1 = element.elements();
            for (Element element1 : elements1) {
                System.out.printf("\t\t" + element1.getName() + ":" + element1.getText());//遍历子节点的子节点
            }
            System.out.println("\n");
        }

    }
}

XML.PNG