XML学习笔记
LZC Lv4

XML

XML 是独立于软件和硬件的信息传输工具。

什么是XML?

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

XML与HTML的差别

XML 不是 HTML 的替代。

XML 和 HTML 为不同的目的而设计:

XML 被设计为传输和存储数据,其焦点是数据的内容。

HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息,而 XML 旨在传输信息。


XML的用途

XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。

XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。

通过 XML,可以在不兼容的系统之间轻松地交换数据。


XML的声明

一个XML实例:

1
2
3
4
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<body>Hello, XML</body>
</note>

第一行是XML声明,它定义XML版本为1.0,所使用的编码为ISO-8859-1

以下是XML的处理指令,以<?开头,以?>结尾

1
<?  ?>

XML 树结构

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

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

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

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

1
2
3
4
5
<root>
<child>
<subchild>.....</subchild>
</child>
</root>

XML语法规则

XML的语法规则很简单,容易学习

所有XML元素都要有关闭标签

在HTML中,下面代码是没有关闭标签的元素:

1
<p> Hello, XML

在XML中,如果省略了关闭标签是违反语法规则的。

1
<p> Hello, XML </p>

**注意:**XML的声明没有关闭标签,是因为声明不属于XML的元素,不需要关闭标签

XML标签对大小写敏感

XML必须正确嵌套

在HTML中,没有正确嵌套的元素有时是可以使用的:

1
<b><i> Hello, XML </b></b>i>

在XML中,所有元素都必须正确嵌套:

1
<b><i> Hello, XML </i></b>

XML文档必须有根元素

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

因此XML文档必须有一个元素是其他所有元素的父元素

XML的属性值加引号

例如给下面的date属性赋值,其属性值必须加引号:

1
2
3
<note date="09/15/2023">
<name>XML</name>
</note>

单引号和双引号都可以。

实体引用

在XML中,一些字符拥有特殊的意义,如<>

如果把字符<放在XML元素中,会发生错误,这是因为解析器遇到<会把它当作新元素的开始。

因此需要使用实体引用来代替这些特殊字符。

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

实体引用 字符 含义 英语单词
&lt; < 小于 less than
&gt; > 大于 greater than
&amp; & 和号 ampersand
&apos; 单引号 apostrophe [计]撇号;
&quot; " 引号 quotes

这和在Markdown中的用法一样。

**注意:**在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。

XML中的注释

与HTML类似

1
<!-- This is a comment -->

在XML中,空格会被保留

HTML 会把多个连续的空格字符裁减(合并)为一个,在 XML 中,文档中的空格不会被删节。


XML元素

什么是XML元素?

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

元素可以包含其他元素或文本,元素可以拥有属性(属性值用引号。

XML元素命名规则

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

可使用任何名称,因为XML没有保留的关键字。

最佳命名习惯是使名称具有描述性。名称应当比较简短,避免使用-.:这些字符。

XML元素是可扩展的

XML 的优势之一,就是可以经常在不中断应用程序的情况进行扩展。


XML属性

元素的属性必须有属性值,且属性值必须用引号括起来。

请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 ID 属性是一样的。

例如:

1
2
3
4
5
6
7
8
<root>
<note id="0">
<body>Hello</body>
</note>
<note id="1">
<body>World</body>
</note>
</root>

XML验证

拥有正确语法的 XML 被称为“形式良好”的 XML。

通过 DTD 验证的 XML 是“合法”的 XML。

形式良好的XML文档

XML文档拥有正确的语法

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

验证XML文档

合法的XML文档是“形式良好”的XML文档,同样遵守了文档类型定义(DTD)的语法规则。


文档类型定义(DTD)

文档类型定义(DTD)可定义合法的XML文档构建模块。

它使用一系列合法的元素来定义文档的结构。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

内部DTD的引用

XML和DTD在同一个XML文本中存在

它应当通过下面的语法包装在一个 DOCTYPE 声明中:

1
<!DOCTYPE 根元素 [元素声明] >

注意:关键字DOCTYPE必须大写。

外部DTD的引用

将DTD作为一个单独的文件独立保存,该DTD是一个文本文件,扩展名为.dtd

引入外部DTD文档,需要在XML文本中的DOCTYPE指令中使用关键字SYSTEM或者PUBLIC进行引用,以达到对XML文本数据的规范。

1
<!DOCTYPE 根元素 SYSTEM "文件名" >

外部DTD作为一个外部文件可以被多个XML文档引用。

对于外部DTD,根据其性质分为两种:

  1. 公有文件,指国际上标准组织制定或者行业内部得到广泛支持认可的DTD文件,使用关键字PUBLIC
  2. 私有文件,指未公开的、属于个人或某些组织的DTD文件,使用关键字SYSTEM

内部DTD和外部DTD可以混合使用。

为什么使用DTD?

通过 DTD,每一个 XML 文件均可携带一个有关其自身格式的描述。

通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

可以使用 DTD 来验证自身的数据。

DTD建构模块

所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:

  • 元素
  • 属性
  • 实体
  • PCDATA
  • CDATA

元素

元素是 XML 以及 HTML 文档的主要构建模块。

XML元素的例子是"note"和"message"。

属性

属性提供有关元素的额外信息。

属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。

实体

实体是用来定义普通文本的变量。实体引用是对实体的引用。

PCDATA

PCDATA 的意思是被解析的字符数据(parsed character data)。

可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

CDATA

CDATA 的意思是字符数据(character data)。

**CDATA 是不会被解析器解析的文本。**在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

DTD元素

ELEMENT

声明一个元素

在 DTD 中,XML 元素通过元素声明来进行声明。

1
<!ELEMENT 元素名称 类别>

1
<!ELEMENT 元素名称 (元素内容)>

空元素

1
<!ELEMENT 元素名称 EMPTY>

只有 PCDATA 的元素

只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:

1
<!ELEMENT 元素名称 (#PCDATA)>

带有任何内容的元素

通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:

1
<!ELEMENT 元素名称 ANY>

带有子元素(序列)的元素

带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

1
<!ELEMENT 元素名称 (子元素名称 1)>

1
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

声明只出现一次的元素

1
<!ELEMENT 元素名称 (子元素名称)>

声明最少出现一次的元素

1
<!ELEMENT 元素名称 (子元素名称+)>

声明出现零次或多次的元素

1
<!ELEMENT 元素名称 (子元素名称*)>

DTD属性

ATTLIST

声明属性

1
<!ATTLIST 元素名称 属性名称 属性类型 默认值>

规定一个默认的属性值

DTD:

1
2
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">

“square” 被定义为带有 CDATA 类型的 “width” 属性的空元素。如果宽度没有被设定,其默认值为0 。

DTD实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

实体引用是对实体的引用。

实体可在内部或外部进行声明。

一个内部实体声明

1
<!ENTITY 实体名称 "实体的值">

一个外部实体声明

1
<!ENTITY 实体名称 SYSTEM "URI/URL">

XML关联CSS的方式

通过使用CSS(Cascading Style Sheets 层叠样式表),可以将显示信息添加到XML文档中。

通过以下代码将XML文件链接到CSS文件:

1
<?xml-stylesheet type="text/css" href="***.css"?>

通过 工具-在浏览器预览 或 F6 显示

CSS语法

由三部分构成:选择器(selector)、属性(property)、属性值(value)

1
2
3
4
5
selector {
property1: value;
property2: value;
property3: value;
}

注意:虽然在CSS中不区分大小写,但是在XML中区分大小写,因此需要注意与XML中一致。