XML简介
XML是EXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。
-
可扩展 三个字表面上的意思是XML允许自定义格式。但这不代表可以随便写。
-
在XML基本语法规范的基础上,使用的那些第三方应用程序、框架会通过XML约束的方式强制规定配置文件中可以写什么和怎么写。
-
XML基本语法这个知识点的定位是:不需要从零开始,从头到尾的一行一行编写XML文档,而是在第三方应用程序、框架已提供的配置文件的基础上修改。要改成什么样取决于你的需求,而怎么改取决XML基本语法和具体的XML约束。
常见配置文件类型
- properties文件
例如druid连接池就是使用properties文件作为配置文件 - XML文件
例如Tomcat就是使用XML文件作为配置文件 - YAML文件
例如SpringBoot就是使用YAML作为配置文件 - json文件
通常用来做文件传输,也可以用来做前端或者移动端的配置文件
properties配置文件
示例
dev.atguigu.url=jdbc:mysql://localhost:3306/atguigu
dev.atguigu.driver=com.mysql.cj.jdbc.Driver
dev.atguigu.username=root
dev.atguigu.password=root
test.atguigu.url=jdbc:mysql://localhost:3306/atguigu
test.atguigu.driver=com.mysql.cj.jdbc.Driver
test.atguigu.username=zhangsan
test.atguigu.password=123456
formal.atguigu.url=jdbc:mysql://localhost:3306/atguigu
formal.atguigu.driver=com.mysql.cj.jdbc.Driver
formal.atguigu.username=lisi
formal.atguigu.password=654321
语法规范
- 由键值对组成
- 键和值之间的符号是等号
- 每一行都必须顶格写,前面不能有空格之类的其他符号
xml配置文件
示例
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!--
1 根标签只能有一个
2 第一行永远都是 <?xml version="1.0" encoding="UTF-8"?> 前面不可以放任何东西
3 xml是有约束,约束用于限定xml内部能编写的内容
dtd 简单 上手快 约束没有schema细致
schema 复杂 上手慢 约束要比dtd约束细致
-->
<jdbc>
<dev id="001">
<username>root</username>
<password>root</password>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/atguigu</url>
</dev>
<test id="002">
<username>zhangsan</username>
<password>123456</password>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/atguigu</url>
</test>
<formal id="003">
<username>lisi</username>
<password>654321</password>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/atguigu</url>
</formal>
</jdbc>
XML的基本语法
- XML的基本语法和HTML的基本语法简直如出一辙。其实这不是偶然的,XML基本语法 + HTML约束 = HTML语法。在逻辑上HTML确实是XML的子集。
- XML文档声明:这部分基本上就是固定格式,要注意的是文档声明一定要从第一行第一列开始写
<?xml version="1.0" encoding="UTF-8"?>
- 根标签
- 根标签有且只能有一个。
- 标签关闭
- 双标签:开始标签和结束标签必须成对出现。
- 单标签:单标签在标签内关闭。
- 标签嵌套
- 可以嵌套,但是不能交叉嵌套。
- 注释不能嵌套
- 标签名、属性名建议使用小写字母
- 属性
- 属性必须有值
- 属性值必须加引号,单双都行
XML的约束(稍微了解)
将来我们主要就是根据XML约束中的规定来编写XML配置文件,而且会在编写XML的时候根据约束来提示我们编写, 而XML约束主要包括DTD和Schema两种。
- DTD
- Schema
Schema约束要求一个XML文档中,所有标签,所有属性都必须在约束中有明确的定义。
下面我们以web.xml的约束声明为例来做个说明:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
DOM4J进行XML解析
DOM4J的使用步骤
- 导入jar包 dom4j.jar
- 创建解析器对象(SAXReader)
- 解析xml 获得Document对象
- 获取根节点RootElement
- 获取根节点下的子节点
DOM4J的API介绍
- 创建SAXReader对象
SAXReader saxReader = new SAXReader();
- 解析XML获取Document对象: 需要传入要解析的XML文件的字节输入流
Document document = reader.read(inputStream);
- 获取文档的根标签
Element rootElement = documen.getRootElement()
- 获取标签的子标签
//获取所有子标签
List<Element> sonElementList = rootElement.elements();
//获取指定标签名的子标签
List<Element> sonElementList = rootElement.elements("标签名");
- 获取标签体内的文本
String text = element.getText();
- 获取标签的某个属性的值
String value = element.attributeValue("属性名");
示例
public class TestDom4j {
@Test
public void testRead() throws Exception {
// 读取jdbc.xml配置文件,获得document对象
SAXReader saxReader = new SAXReader();
// 通过类加载器获得指向字节码根路径下的指定文件的输入流
InputStream resourceAsStream = TestDom4j.class.getClassLoader().getResourceAsStream("jdbc.xml");
// 通过输入流获得配置文件,解折成一个dom对象
Document document = saxReader.read(resourceAsStream);
// 从document对象上获取配置文件中的信息
/*
* Node 结点
* Element 元素结点(标签结点)
* Attribute 属性结点
* Text 文本结点
* */
Element rootElement = document.getRootElement();
System.out.println(rootElement.getName());
// 获取元素下的子元素
List<Element> elements = rootElement.elements();
for (Element element : elements) {
System.out.println("\t"+element.getName());
// 从元素上获取属性
Attribute idAttribute = element.attribute("id");
System.out.println("\t\t"+idAttribute.getName()+"="+idAttribute.getValue());
// 继续读取子元素
List<Element> eles = element.elements();
for (Element ele : eles) {
System.out.println("\t\t"+ele.getName()+":"+ele.getText());
}
}
}
}