文字编码 - XML 教程

本文最后更新于:2021年12月11日 上午

XML 指可扩展标记语言,被设计用来传输和存储数据。本文记录XML基础知识。

教程参考w3school

简介

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准
  • XML 是没有任何行为的纯文本,仅编码保存数据

用途

  • XML 把数据从 HTML 分离
  • XML 简化数据共享
  • XML 简化数据传输
  • XML 简化平台的变更

XML 树结构

XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。

  • XML 文档必须包含根元素。该元素是所有其他元素的父元素

  • XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端

  • 所有元素均可拥有子元素

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

这段代码表示了具有如下元素框架的三本书。

语法规则

  • 所有 XML 元素都须有关闭标签(声明不是XML元素,恰好他又不需要关闭)

  • XML 标签对大小写敏感,必须使用相同的大小写来编写打开标签和关闭标签:

1
2
<Message>这是错误的。</message>
<message>这是正确的。</message>
  • XML 必须正确地嵌套
1
2
<b><i>错误嵌套</b></i>
<b><i>正确嵌套</i></b>
  • XML 文档必须有根元素

XML 文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。

1
2
3
4
5
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
  • XML 的属性值须加引号
1
2
3
4
5
<note date=08/08/2008>      <!-- 错误属性 --> 
<note date="08/08/2008"> <!-- 正确属性 -->
<to>George</to>
<from>John</from>
</note>
  • 实体引用

在 XML 中,有 5 个预定义的实体引用:

< < 小于
> > 大于
& & 和号
' 单引号
" " 引号
  • 注释

语法与 HTML 的语法很相似:

1
<!-- This is a comment --> 
  • 在 XML 中,空格会被保留

  • XML 以 LF 存储换行

在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。在 Unix 应用程序中,新行以 LF 字符存储。而 Macintosh 应用程序使用 CR 来存储新行。

XML 元素

XML 元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

XML 命名规则

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格

最佳命名习惯

  • 使名称具有描述性。使用下划线的名称也很不错。

  • 名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>。

  • 避免 “-” 字符。如果您按照这样的方式进行命名:“first-name”,一些软件会认为你需要提取第一个单词。

  • 避免 “.” 字符。如果您按照这样的方式进行命名:“first.name”,一些软件会认为 “name” 是对象 “first” 的属性。

  • 避免 “:” 字符。冒号会被转换为命名空间来使用(稍后介绍)。

XML 属性

XML 元素可以在开始标签中包含属性,类似 HTML。属性 (Attribute) 提供关于元素的额外(附加)信息。

  • XML 属性必须加引号,单引号和双引号均可使用。
1
<person sex="female">

1
<person sex='female'>

XML 元素 vs. 属性

1
2
3
4
5
6
7
8
9
10
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>

<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>

上述代码表示了同样的信息,也就是说XML中,属性携带的信息量可以被子元素取代。没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。

XML属性的缺点

  • 属性无法包含多重的值(元素可以)
  • 属性无法描述树结构(元素可以)
  • 属性不易扩展(为未来的变化)
  • 属性难以阅读和维护

XML 验证

拥有正确语法的 XML 被称为“形式良好”的 XML。通过 DTD 验证的 XML 是“合法”的 XML。

“形式良好”(Well Formed)的 XML 文档

  • XML 文档必须有根元素
  • XML 文档必须有关闭标签
  • XML 标签对大小写敏感
  • XML 元素必须被正确的嵌套
  • XML 属性必须加引号