关于XML文件¶
约 1056 个字 74 行代码 预计阅读时间 4 分钟
介绍¶
XML是EXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。
-
可扩展表示三个字表面上的意思是XML允许自定义格式。但这不代表可以随便写
-
在XML基本语法规范的基础上,你使用的那些第三方应用程序、框架会通过XML约束的方式强制规定配置文件中可以写什么和怎么写
-
XML基本语法这个知识点的定位是:我们不需要从零开始,从头到尾的一行一行编写XML文档,而是在第三方应用程序、框架已提供的配置文件的基础上修改。要改成什么样取决于你的需求,而怎么改取决XML基本语法和具体的XML约束
在JavaWeb中常见的配置文件¶
properties
文件,例如前面使用的JDBC中druid连接池就是使用properties
文件作为配置文件XML
文件,例如Tomcat就是使用XML
文件作为配置文件YAML
文件,例如SpringBoot就是使用YAML
作为配置文件json
文件,通常用来做文件传输,也可以用来做前端或者移动端的配置文件
properties配置文件回顾¶
前面在使用JDBC连接数据库时,为了防止硬编码使用了配置文件,下面是对应的文件内容:
Properties | |
---|---|
1 2 3 4 5 6 |
|
其基本语法规范见对应的properties文件要求部分
引入XML文件配置¶
下面是XML文件内容示例:
XML | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 |
|
在上面的代码中,第一行是xml
文件所必须的内容,被称为xml
文档声明。这部分基本上就是固定格式,一般情况下也不会修改,要注意的是文档声明一定要从第一行第一列开始写。接着<students></students>
为跟标签,在xml
文件中,根标签只能有一对,与HTML中的标签规则一样,双标签:开始标签和结束标签必须成对出现,单标签:单标签在标签内关闭,例如上面代码中<students></students>
、<student></student>
等,并且,标签可以嵌套,但是不能交叉嵌套,但是注释不可以嵌套,例如上面代码中<students></students>
中嵌套了<student></student>
,<student></student>
中嵌套了<name></name>
和<age></age>
另外,在xml
中每个标签都可以有属性,属性的格式如下:
- 属性必须有值
- 属性值必须加引号,单引号或者双引号都行
前面提到xml
文件可以自定义格式,但是为了保证标准性,有常用的两种约束:
- DTD约束:具有简单易上手的特点,但是约束力不强
- Schema约束:具有复杂难上手的特点,但是约束力强
后面主要会使用Schema约束来编写XML配置文件,Schema约束要求在一个XML文档中,所有标签以及所有属性都必须在约束中有明确的定义
下面是一个web.xml
文件中的约束声明示例:
XML | |
---|---|
1 2 3 4 5 |
|
在上面的声明中,在xsi:schemaLocation
属性值中有个后缀为.xsd
的文件,这个就代表当前xml
文件使用的是Schema约束,如果后缀为.dtd
的文件,则代表当前xml
文件使用的是DTD约束
使用DOM4J读取XML配置文件内容(了解)¶
Note
因为后面框架都会自动读取XML配置文件内容,而不需要程序员编写代码读取,所以本部分了解一下即可
使用DOM4J读取的基本步骤如下:
- 导入
jar
包 - 创建解析器对象(
SAXReader
) - 解析
xml
文件,获得Document
对象 - 获取根节点
RootElement
- 获取根节点下的子节点
常用API介绍如下:
-
创建
SAXReader
对象Java 1
SAXReader saxReader = new SAXReader();
-
解析XML获取
Document
对象:需要传入要解析的XML文件的字节输入流Java 1
Document document = reader.read(inputStream);
-
获取文档的根标签
Java 1
Element rootElement = documen.getRootElement()
-
获取标签的子标签
Java 1 2 3 4
//获取所有子标签 List<Element> sonElementList = rootElement.elements(); //获取指定标签名的子标签 List<Element> sonElementList = rootElement.elements("标签名");
-
获取标签体内的文本
Java 1
String text = element.getText();
-
获取标签的某个属性的值,例如
id = "001"
Java 1
String value = element.attributeValue("001");
例如下面的代码:
XML | |
---|---|
1 2 3 4 5 6 7 8 |
|
Java | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|