简介:
- XML 指可扩展标记语言(EXtensible Markup Language)。
- XML 是一种很像HTML的标记语言。
- XML 的设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准。
特点:
- 所有 XML 元素都须有关闭标签
- XML 标签对大小写敏感
- XML 文档必须有根元素
- XML 的属性值须加引号,双引号、单引号都可以
- 实体引用:
<
,>
,&
,&apos
,"
- 在 XML 中,空格会被保留, 但多余的空格会被合并成一个
- XML 以 LF 存储换行
用途:
- XML 把数据从 HTML 分离: 改变数据时不需要对HTML进行改变
- XML 简化数据共享
- XML 简化数据传输:通过 XML,可以在不兼容的系统之间轻松地交换数据。
- XML 简化平台的变更
- XML 使您的数据更有用
XML 元素
指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
XML 命名规则
XML 元素必须遵循以下命名规则:
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
可使用任何名称,没有保留的字词。
最佳命名习惯
使名称具有描述性。使用下划线的名称也很不错。
名称应当比较简短,比如:<book_title>
,而不是:<the_title_of_the_book>
。
- 避免 “-” 字符。如果您按照这样的方式进行命名:“first-name”,一些软件会认为你需要提取第一个单词。
- 避免 “.” 字符。如果您按照这样的方式进行命名:“first.name”,一些软件会认为 “name” 是对象 “first” 的属性。
- 避免 “:” 字符。冒号会被转换为命名空间来使用。
XML 命名空间(XML Namespaces)
在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
使用命名空间案例:
1 | <rtdBusConfig |
w3c案例: https://www.w3school.com.cn/xml/xml_namespaces.asp
1 | <f:table xmlns:f="http://www.w3school.com.cn/furniture"> |
我们在根标签中添加了一个 xmlns:f 属性,xmlns 代表的是 xml namespace,f是我们声明的命名空间前缀,f本身并没有意义,可以将它理解为是 http://www.atguigu.com/xml/b 的一个别名,我们在标签中使用 f,就相当于使用这个 uri 地址。一旦使用了f 这个前缀,就代表这个标签是属于 http://www.atguigu.com/xml/b 这个唯一标识命名空间下的元素。
我们还可以在一个文档中定义多个命名空间,如下的语法也是没有问题的:
1 | <b:book xmlns:b="http://www.atguigu.com/xml/b" |
more: https://www.cnblogs.com/xiaomaomao/p/13968976.html
XML Namespace (xmlns) 属性
XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:xmlns<:namespace-prefix>="namespaceURI"
当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
如果没有:namespace-prefix
,为xmlns="namespaceURI"
,则采用的是默认的命名空间(Default Namespaces)
命名空间的实际应用
当开始使用 XSL 时,您不久就会看到实际使用中的命名空间。XSL 样式表用于将 XML 文档转换为其他格式,比如 HTML。
如果您仔细观察下面的这个 XSL 文档,就会看到大多数的标签是HTML标签。非 HTML 的标签都有前缀 xsl,并由此命名空间标示:“http://www.w3.org/1999/XSL/Transform”:
1 | "1.0" encoding="ISO-8859-1" xml version= |
XML语法-处理指令
处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容,标签名为中文时,css不起作用。
如<?xml-stylesheet type="text/css" href="css文件名.css"?>*
处理指令必须以"<?"作为开头,以"?>
"作为结尾,XML声明语句(<?xml version="1.0" encoding="utf-8"?>
)就是最常见的一种处理指令。
XML报文头
<?xml version="1.0" encoding="UTF-8"?>
- 第一个是XML的声明,其中version属性是必须写的。
- encoding属性的值表示用于读取文档的字符集,第二个是一个文档定义的描述。
XML CDATA
由于所有 XML 文档中的文本均会被解析器解析,而**只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。**因此对某些不希望被解析的文本时,需要用CDATA嵌套起来。对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出
- 术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
- CDATA 部分中的所有内容都会被解析器忽略。
- CDATA 部分由
"<![CDATA["
开始,由"]]>"
结束:
在 XML 元素中,"<" 和 “&” 是非法的。
- “<” 会产生错误,因为解析器会把该字符解释为新元素的开始。
- “&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。
1 | <script> |
XML DOM
DOM 把 XML 文档视为一种树结构。通过这个 DOM 树,可以访问所有的元素。可以修改它们的内容(文本以及属性),而且可以创建新的元素。元素,以及它们的文本和属性,均被视为节点。
xmlns、xmlns:xsi和xsi:schemaLocation
POM 文件头示例
1 | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
初学者看到如上的内容应当有如下困惑点:
- xmlns:xsi , xmlns, xsi:schmeLocation 这些看上去相近的属性是什么含义, 为什么他们的值是不一样的 URL
- 这些 URL 是否对应一些可以访问的资源,对于该文件的解析是否会需要下载这些 URL 对应的资源
xmlns:xsi有什么作用?
按命名空间的概念来说,xmlns:xsi
就是定义了一个命名空间前缀 xsi ,其对应的唯一字符串为 http://www.w3.org/2001/XMLSchema-instance。 但是读者会发现, 这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。
- 注解: XML 解析器可以根据 一个 XSD 文件的内容来解析另一个 XML 文件, 判断该文件的结构是否和 XSD 文件中定义的一致。 XSD 文件 可以理解为 XML 文档可以自定义的语法或格式检查器。
xsi:schemaLocation有何作用?
xsi:schemaLocation其实是Namespace为http://www.w3.org/2001/XMLSchema-instance里的schemaLocation属性,因为我们一开始声明了xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
,然后再看xsi:schemaLocation的使用:xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
,上面这行的语法其实是xsi:schemaLocation = "键" "值"
即 xsi 命名空间下 schemaLocation 元素的值为一个由空格分开的键值对。
这里的xsi:schemaLocation(当然一般都使用这个前缀)。它定义了XML Namespace和对应的XSD(Xml Schema Definition)文档的位置的关系,他们总是成对出现的,通常为两个URI引用对组成,两个URI之间以空白符分隔(空格和换行均可)。
- 前一个“键” http://maven.apache.org/POM/4.0.0 指代 【命名空间】, 只是一个全局唯一字符串而已
- 后一个值指代 【XSD location URI】 , 这个值指示了前一个命名空间所对应的 XSD 文件的位置, XML Schema Parser处理器可以利用这个信息获取到 XSD 文件, 从而通过 XSD 文件对所有属于 命名空间 http://maven.apache.org/POM/4.0.0 的元素结构进行校验, 因此这个值必然是可以访问的, 且访问到的内容是一个 XSD 文件的内容
现在概念懂了,来看个spring的xml例子把
参考:
Author: Mrli
Link: https://nymrli.top/2021/10/09/XML语法规则笔记/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.