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

相关推荐
余瑾瑜11 分钟前
如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板
开发语言·后端·golang
爱的叹息12 分钟前
Spring Boot 测试详解,包含maven引入依赖、测试业务层类、REST风格测试和Mock测试
spring boot·后端·maven
peiwang2451 小时前
网页制作中的MVC和MVT
后端·mvc
酱酱们的每日掘金1 小时前
一键连接 6000 + 应用dify MCP 插件指南、谷歌 AI 编程产品一网打尽、MCP玩出花了丨AI Coding 周刊第 4 期
前端·后端·ai编程·mcp
橘子青衫1 小时前
多线程编程探索:阻塞队列与生产者-消费者模型的应用
java·后端·架构
胡萝卜糊了Ohh1 小时前
scala
开发语言·后端·scala
Java致死1 小时前
SpringBoot(一)
java·spring boot·后端
草捏子2 小时前
别让外部接口"毒死"你的系统!防腐层技术一定要知道
后端
进击的阿晨2 小时前
🔥想自学 Java 却踩坑无数?从月薪 3K 到 15K 程序员的逆袭笔记来啦!
java·后端·面试
TS古宁2 小时前
CST1017.基于Spring Boot+Vue共享单车管理系统
java·前端·vue.js·spring boot·后端