XML配置文件

XML介绍

XML(eXtensible Markup Language,可扩展标记语言) 是一种用于存储和传输结构化数据的标记语言。它的核心特点包括:

  • 可扩展性:允许用户自定义标签和数据结构,适应不同场景需求。
  • 自描述性:通过标签名称和层级关系,直观描述数据的含义。
  • 平台无关性:纯文本格式,兼容几乎所有系统和编程语言。
  • 结构化存储:通过嵌套标签清晰表达数据间的层级关系。

XML 的设计初衷是 "存储和传输数据",而非像 HTML 那样专注于"显示数据"。

XML语法

XML编写要求

  1. xml文档后缀名.xml

  2. xml第一行必须定义为文档声明

    xml 复制代码
    <?xml version='1.0'?>
  3. xml文档中有且只有一个根标签

  4. 属性值必须使用引号包围起来

  5. 标签必须正确关闭。

  6. xml标签名区分大小写。

举例:

java 复制代码
<?xml version='1.0'?>
<users>//这种就是根标签
    <user id='1'>//属性值必须用引号包围
        <name>zhangsan</name>//标签必须正确关闭,要么是这种关闭,要么是自关闭,比如<br/>
        <age>23</age>
        <gender>male</gender>
    </user>

    <user id='2'>
        <name>lisi</name>
        <age>13</age>
        <gender>female</gender>
    </user>    
</users>

XML组成部分

  1. 文档声明

    格式:<?xml 属性列表?>

    属性列表:

    • version:版本号,最好使用1.0因为1.1不向下兼容。这个属性必须添加。
    • encoding:编码方式,告知解析引擎当前xml文档使用的编码格式,默认为:ISO-8859-1
    • standalone:是否独立,有两个值,yes和no。yes代表不依赖其他文件,no是依赖其他文件。
  2. 指令:结合css来控制标签的样式的,但是xml的功能已经不是这个了,知道有这玩意就好。

  3. 标签:标签是自定义的,标签名见名知意就好了。

  4. 属性:只需要知道id属性值唯一。

  5. 文本 :如果我们在xml中想写比如说>,<这些必须通过写&it;&gt;来表示,就很麻烦,但是xml提供了一个办法来解决:

    CDATA区:在该区域的数据会被原样展示。

    格式:<![CDATA[ 数据 ]]>

约束

我们通过编写xml文档让框架进行解析来实现我们对框架的配置要求。

但是xml的标签是自定义的,故我们在使用框架的时候框架会给出说明文档,说明文档里面规定了xml文档的书写规则。

这个说明文档也叫约束文档

故学习约束只需要读懂框架提供的约束文档即可

约束主要分为:

  1. DTD:简单的约束技术。
  2. Schema:一种复杂的约束技术。

DTD约束技术使用方式:

使用前要先引入dtd文档到xml文档中:

dtd 复制代码
<!- 这个代表根标签名为student,并且子标签student必须出现0次及以上,这个是正则表达式用法 -->
<!ELEMENT students (student*) >
<!- 这个代表student子标签里面必须出现name,age,sex子标签,且必须按照这个顺序出现-->
<!ELEMENT students (name,age,sex) >
<!- 这个代表name子标签-->
<!ELEMENT name (#PCDATA)>
<!- 这个代表age子标签-->
<!ELEMENT age (#PCDATA)>
<!- 这个代表sex子标签-->
<!ELEMENT sex (#PCDATA)>
<!- 这个代表student子标签里面的属性ID叫number-->
<!ATTLIST student number ID #REQUIRED>

dtd的两种格式:

  • 内部dtd:将约束规则定义在xml文档中。(不常用)

    xml 复制代码
    <?xml version='1.0'?>
    <!DOCTYPE students[
        <!ELEMENT students (student*) >
        <!ELEMENT student (name,age,sex) >
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST student number ID #REQUIRED>
    ]>
    <students>
        <student number="s001">
            <name>zhangsan</name>
            <age>13</age>
            <sex>male</sex>
        </student>
        <student number="s002">
            <name>zhangsan</name>
            <age>13</age>
            <sex>male</sex>
        </student>
    </students>
  • 外部dtd:将约束规则定义在外部的dtd文件中。

    外部dtd根据所处位置不同分为两种引用方式。

    1. 本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件位置">

      xml 复制代码
      <?xml version='1.0'?>
      <!DOCTYPE students SYSTEM "student.dtd">
      <students>
          <student number="s001">
              <name>zhangsan</name>
              <age>13</age>
              <sex>male</sex>
          </student>
          <student number="s002">
              <name>zhangsan</name>
              <age>13</age>
              <sex>male</sex>
          </student>
      </students>
    2. 网络 <!DOCTYPE 根标签名 PUBLIC "dtd文件名" "dtd文件的url位置"

Schema约束技术

dtd约束技术对标签的内容无法做到限定,比如说age不能给他限定到0到100,只能随意。

所以通过schema约束技术对标签内容进行限定

Schema本质是一个xml文件但是它的文件的后缀是xsd

引入xsd文件的方式

xml 复制代码
<!- 1.填写xml文件的根元素
	2.引入xsi前缀(固定格式)xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	3.引入xsd文件的命名空间xsi:schemaLocation="http://www.normaling.cn/xml student.xsd
	这个引用后,我们以后要使用student.xsd里面的元素必须写成
	http://www.normaling.cn/xml:student.xsd里面的元素
	即,前缀名http://www.normaling.cn/xml
	4.为每一个xsd约束声明一个前缀,作为标识
	因为第三步前缀名太长不方便阅读,通过第四步来简化代表
	xmlns:前缀名="http://www.normaling.cn/xml"
	这样以后使用student.xsd里面的内容只需要使用我们自定义的前缀名来代替这个
	如果没写自定义前缀名,直接写成xmln="http://www.normaling.cn/xml"就代表默认前缀,可不写前缀名
	前缀的作用是当我们在第三步中引入了多个schema文档的时候,会出现一样的标签名,用来区分标签名使用的
-->

举例:

xml 复制代码
<students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="
            http://www.normaling.cn/xml1 student.xsd
            http://www.normaling.cn/xml2 student2.xsd"
            xmlns:a="http://www.normaling.cn/xml1"
            xmlns:b="http://www.normaling.cn/xml2"
>

schema框架会给出,不需要知道如何怎么写xsd文件,看懂即可.

相关推荐
wuk99829 分钟前
互联网应用主流框架整合 Spring Boot开发
java·spring boot·后端
程序员NEO1 小时前
10分钟上线一个Web应用?我没开玩笑,用这个AI智能体就行
人工智能·后端
倔强青铜三2 小时前
Python的Lambda,是神来之笔?还是语法毒瘤?
人工智能·后端·python
a cool fish(无名)2 小时前
rust-方法语法
开发语言·后端·rust
随意石光2 小时前
秒杀功能、高并发系统关注的问题、秒杀系统设计
后端
随意石光2 小时前
Spring Cloud Alibaba Seata、本地事务、分布式事务、CAP 定理与 BASE 理论、Linux 安装 Seata、Seata的使用
后端
程序员清风2 小时前
程序员入职公司实习后应该学什么?
java·后端·面试
智慧源点2 小时前
基于DataX的数据同步实战
后端
随意石光3 小时前
Java操作Excel报表,EasyExcel用法大全
后端
大葱白菜3 小时前
Java 反射的作用详解:为什么说它是 Java 中最强大的特性之一?
java·后端·程序员