摘要:本文学习了XML的基本语法。
1 简介
XML(Extensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言。它被设计为具有自我描述性,既可以被人阅读,也能被机器解析。
XML最大的特点有两个:
- 自定义标签:XML没有预定义标签,允许创作者定义自己的标签和自己的文档结构。
- 存储和传输:XML不会做任何事情,仅用于存储和传输信息。
XML与HTML的区别:
- 核心用途:XML是标记语言,核心用途是数据存储和交换。HTML是展示语言,核心用途是网页内容展示。
- 语法严格:XML的语法规则比较严格,HTML的语法规则相对宽松。
- 标签规则:XML是可扩展的,用户可以自定义标签。HTML是不可扩展的,用户只能使用浏览器预定义的标签。
2 基本结构
2.1 序言
XML文档的序言是可选的,如果存在,则必须位于第一行:
1 |
属性含义:
- version: 指定XML版本(通常为1.0)
- encoding: 指定字符编码(通常为UTF-8)
2.2 树结构
XML文档必须有且仅有一个根元素,根元素是所有其他元素的父元素:
1 | <根元素名> |
XML文档中的元素形成了一棵文档树,这棵树从根部开始,并扩展到树的最底端,所有的元素都可以有子元素。
所有的元素都可以有文本内容和属性(类似HTML中的树)。
2.3 元素
语法:
1 | <元素名>内容</元素名> |
规则:
- 元素包括根元素及其子元素,文档的序言和声明不属于元素
- 元素名称可以包含字母、数字、下划线和连字符,但不能包含空格,也不能以数字或标点符号开头
- 元素必须有结束标签,除非元素是空元素,可以使用自闭合标签
- 元素名称区分大小写
- 元素必须正确嵌套,不能出现嵌套错误
示例:
1 | <book> |
2.4 属性
语法:
1 | <元素名 属性名="属性值"> |
规则:
- 属性名称必须是合法的XML名称,并且不能重复
- 属性值必须是合法的XML字符串,不能包含
<和& - 属性值必须用引号包围,使用单引号或双引号
- 属性不能包含多个值
虽然XML允许使用属性,但不建议使用属性,因为属性会增加XML文档的复杂性,并且会影响XML的可读性。
建议使用元素来描述数据,仅仅使用属性来描述元素的元数据,比如ID属性。
2.5 注释
语法:
1 | <!-- 这是单行注释 --> |
规则:
- 注释不能出现在序言之前
- 注释不能嵌套
- 注释不能包含
--
2.6 CDATA区域
CDATA区域用于包含不需要解析的文本内容。
语法:
1 | <![CDATA[ |
示例:
1 | <code> |
2.7 实体引用
预定义实体:
- 使用
<表示<小于号 - 使用
>表示>大于号 - 使用
&表示&和号 - 使用
'表示'单引号 - 使用
"表示"双引号
示例:
1 | <expression>a < b && c > d</expression> |
3 语法验证
3.1 格式良好
一个格式良好的XML文档必须满足:
- 必须有序言
- 必须有唯一的根元素
- 所有标签必须正确闭合
- 元素必须正确嵌套
- 属性值必须用引号包围
- 特殊字符必须转义
- 标签名称区分大小写
示例:
1 |
|
3.2 有效
格式良好的文档和有效的文档有所不同,有效的文档除了满足格式良好的文档的条件外,还必须符合文档类型定义。
目前有两种不同的文档类型定义方式:
- DTD:文档类型定义(Document Type Definition),是比较原始的验证方式,现在已经被XSD取代。
- XSD:XML模式定义(XML Schema Definition),是基于XML的DTD代替方案。
注意:
- 如果只是简单使用XML存储数据,可以不考虑验证问题,只要满足格式良好的文档即可。
- 如果开发XML相关的应用程序,并且需要使用XML进行数据交换,则需要考虑验证问题,保证接收到的XML文档是有效的。
4 命名空间
当需要同时使用两个不同的文档时,如果这两个不同的文档使用了相同的元素名,并且该元素的内容和定义不一致,就会发生命名冲突。
存储了水果列表的文档:
1 |
|
存储了桌子信息的文档:
1 |
|
两个文档同时使用会产生命名冲突,命名空间提供了一种避免元素命名冲突的方法。
语法:
1 | xmlns:前缀="URI" |
说明:
- 使用
xmlns定义命名空间 - 使用
前缀定义命名空间的名称 - 使用
URI定义命名空间的唯一标识符
可以将属性放在根元素上:
1 |
|
也可以将属性放在其他元素上:
1 |
|
将带有命名空间前缀的属性名称称为限定名,将不带命名空间前缀的属性名称称为本地名。
条