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文件,看懂即可.

相关推荐
fanTuanye19 分钟前
【SpringBoot篇】详解短信验证码登录功能实现
spring boot·后端
DonciSacer1 小时前
第一章-Rust入门
开发语言·后端·rust
西京刀客1 小时前
golang常用库之-标准库text/template
开发语言·后端·golang
[email protected]1 小时前
ASP.NET Core 请求限速的ActionFilter
后端·asp.net·.netcore
愛芳芳4 小时前
springboot+mysql+element-plus+vue完整实现汽车租赁系统
前端·vue.js·spring boot·后端·mysql·elementui·汽车
magic 2454 小时前
Spring 框架中 @Configuration 注解详解
java·后端·spring
海风极客6 小时前
Go小技巧&易错点100例(二十八)
开发语言·后端·golang
Absinthe_苦艾酒9 小时前
Spring 容器相关的核心注解
java·后端·spring
why1519 小时前
百度golang开发一面
开发语言·网络·后端·golang
Q_Boom17 小时前
前端跨域问题怎么在后端解决
java·前端·后端·spring