1.2.1 文档声明
在一个完整的 XML 文档中必须包含一个 XML 文档声明,该声明必须位于文档的第一行。这个声明表示该文档是一个 XML 文档,遵循的是哪个 XML 版本的规范。
最简单的 XML 文档声明语法如下:
<?xml version="1.0" ?>
必选属性:version
可选属性:encoding standalone
需要注意的是:在“<”和“?”之间、“?”和“>”之间以及第一个“?”和 xml 之间不能有空格!在第二个“?”之前可以没有、也可以有一个或多个空格。
下面分别介绍属性:
(1)version 属性,必选。
version 属性表示 XML 的版本,因为解析器对不同的版本的解析是有区别的。尽管目前只有 1.0 版本,但在声明中还是必须指定 version 属性。
(2)encoding 属性,可选。
encoding 属性指定文档所用的字符编码方式,可选值有“UTF-8”、“UTF-16”、“GB2312”、“ISO-8859-1”。如果没有设置,则默认为 Unicode 编码。W3C 的 XML1.0 规范里规定,所有的 XML 解析器必须接受 UTF-8 和UTF-16 编码的 Unicode 字符,所以,符合 XML 规范的软件工具都一定支持这两种 Unicode 编码。中文字符编码格式为“GB2312”。
在实践书中的例子的例子时,在没有指定编码格式的时候,用 IE(Microsoft Edge)打开,显示编格式为“ISO-859-1”。本人不懂编码格式,只是遇到过这几种,至于这几种编码格式之间的关系,都不清楚。(待了解)
(3)standalone 属性,可选。
standalone 属性说明文档是否独立,可选值有“yes”、“no”,默认值为“yes”。文档独立,表示该文档不依赖外面的任何文件而可以独立存在,即不需要 DTD 文件来验证其中的标识是否有效,也不需要 XSL、CSS 文件来控制其显示外观。
如果同时设置了 encoding 和 standalone 属性,standalone 属性要位于 encoding 属性之后。
1.2.2 元素定义
与 HTML 一样,XML 文档的主体部分也是由元素(Element)组成的。
元素:即一个标记,包括开始标记,结束标记及其中的内容。如:<书>Java 就业培训教程</书>。
根元素:没有嵌套在其他元素内的元素。根元素通常是 XML 文档中定义个第一个元素,格式良好的 XML 文档有且仅有一个根元素,其他元素都是它的子孙元素。
子孙元素:嵌套在其他元素内的元素。
空元素:没有嵌套子元素和数据的元素,也就是标记对之间没有内容。空元素可以不使用结束标记,但必须在开始标记的结束定界符(>)前面增加一个正斜杠(/)字符表示该标记是一个空元素。空元素一般都与属性配合使用,如<img src="log.gif" />。
注意:在 HTML 中,有的标记没有或者可以不用结束标记来说明,如<img src="log.gif">。在 XML 中,所有标记都必须有结束标记或者使用空元素的结束说明。而且,所有元素都必须合理嵌套,决不允许出现交叉嵌套,破坏文档的结构层次关系。
XML 标记命名规范:
① 区分大小写;② 不能以数字或“_”(下划线)开头;③ 不能包含空格;④ 名称中间不能包含冒号(:)。
XML 标记命名建议:
① 不要使用 “.”,因为在很多程序语言中,“.” 用于引用对象的属性;② 最好不用减号(-),用下划线(_)代替,避免与表达式中的减号(-)运算符发生冲突;③ 名称尽量简短,减少 XML 文档的大小;④ 名称的大小写采用统一标准,要么全大写,要么全小写;⑤ 名称可以使用非英文字符,如中文,但是有些软件可能不支持非英文字符之外的字符,在使用时应考虑到。
1.2.3 属性定义
XML 标签的属性也是自己随便定义的,用于对标签进一步描述和说明。一个标签可以有多个属性,每个属性都有名称和取值。属性命名规范和标签相同。
如:<售价 单位="元">58</售价>
属性也可以被改成用子元素来描述同样的信息。虽然,属性不易被程序扩充、不易被程序操作,但是,程序处理的速度比使用子元素快。
如:<售价>
<单位>元</单位>
<价格>58</价格>
</售价>
1.2.4 注释
注释的内容会被程序忽略而不被程序解释和处理,语法如下:
<!-- 注释信息 --!>
注意:XML 声明只能作为 XML 文件中的第一行,不要把注释放在 XML 声明之前。注释不能嵌套使用。
1.2.5 空格和换行的处理
不像 HTML,在 HTML 文本中连续出现的多个空格和回车换行,总是显示为一个空格。 但是,XML 解析空格和换行时,会一个一个如实交给下游程序处理。例如下面两段内容的意义是不一样的。
第一段:
<网址>www.baidu.com</网址>
第二段:
<网址>
www.baidu.com
</网址>
第一段中的元素只有“www.baidu.com”这一个文本串,而第二段中的元素内容为“回车换行”符、“TAB”制表符、“www.baidu.com”文本串、又一个“回车换行”符的总和。
所以,在编写 XML 文件时,要意识到,空格和换行都作为原始内容被处理。不能为了使文件内容清晰可读,随便使用换行、缩进。
1.2.6 CDATA 区
CDATA 是 character data 的简写,意思是字符数据。CDATA 区指的是不想被解析程序解析的一片原始数据区,它以 “<![CDATA[” 开始,以 “]]>” 结束。
如:<![CDATA[Elements look like <this>]]> ,这样解析程序就不会把 <this> 解释成一个元素的标签,可以实现人们想要的原义文本了,解析器会把这些数据原封不动地交给下游程序处理。
在某些情况下,需要注意 CDATA 区中起始和结束处的空格、换行等空白字符的影响。例如:
<![CDATA[www.baidu.com]]>
和
<![CDATA[
www.baidu.com]]>
这两段文本的意义是不一样的,后者相对前者,在字符串 "www.baidu.com" 的前面多了一个换行字符。
另外,与 XML 区分大小写的特性一致,使用 CDATA 区,“<![CDATA[” 不能写成 “<![cdata[” 或 “<![Cdata[” 等形式。且,CDATA 区内部不能出现 “]]>”,因为它是 CDATA 区的结束标志。
1.2.7 特殊字符
在 XML 文档中一共有 5 个预定义实体,即 5 个字符,意思就是这 5 个字符已经被 XML 文档定义了,就像 Java 的关键字一样。如果我们想要这 5 个字符,就必须使用转义字符序列才能表示其原始字面意义。
XML 文档中的 5 个预定义实体和对应的转义字符序列的对照关系如下:
& ===> &
< ===> <
> ===> >
" ===> "
‘ ===> '
1.2.8 处理指令
处理指令是 Processing Instruction 的中文翻译,简称 PI。处理指令用来为处理 XML 文档的应用程序提供指示信息。
处理指令以 “<?” 开头,以 “?>” 结尾,XML 声明语句是最常见一种处理指令。
XML 分析器把处理指令原封不动地传给应用程序,由应用程序来解释这个指令,按照它所提供的信息进行处理。例如,在 XML 文档可以包含下面的语句告诉浏览器使用 book.css 控制 book.xml 的显示效果。
<?xml-stylesheet type="text/css" href="book.css"?>
【例】book.xml
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="book.css" ?>
<bookStore>
<book>
<bookName>Java 就业&培训课程</bookName>
<author>张孝祥</author>
<price>39.00元</price>
</book>
</bookStore>
【例】book.css
<?xml version="1.0" encoding="GB2312"?>
bookName: {
display: block;
color: red
}
author: {
display: block;
font-style: '宋体'
}
price: {
display: block;
color: olive
}
代码在线格式化:http://tool.oschina.net/codeformat/css
====== 以上内容来源于 张孝祥老师的《深入体验Java Web开发内幕 》,记录下来,只作为个人读书笔记。===========