前言
看到XML的第一反映就是,XML又是什么鬼,是HTML的近亲还是远方亲戚呢?带着这个疑问,咱们先上一张图体会一下:
从上图可以看出,XML是HTML的近亲,是有SGML和HTML共同演化而来的。SGML主要用于大量高度结构化数据的分类和索引,人们对SGML进行了简化衍生出了HTML,但是HTML不能解决所有解释数据的问题,像是影音文件或化学公式、音乐符号等其他形态的内容等问题,为了解决以上问题,专家们使用SGML精简制作,并依照HTML的发展经验,产生除了使用上规则严谨,但是简单的描述数据语言:XML。
XML是什么
XML的全称为EXtensible Markup Language,指可扩展标记语言。XML的设计宗旨是传输数据,而HTML的作用是显示数据。另外我们需要知道XML仅仅是纯文本,没有任何行为,我们需要编写软件或者程序,才能传送,接受和显示出这个文档。
XML 与 HTML 的主要差异
<1>XML 和 HTML 为不同的目的而设计:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
<2>XML是把数据从HTML分离
如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。
通过 XML,数据能够存储在独立的 XML 文件中。这样你就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML 进行任何的改变。
通过使用几行 JavaScript,你就可以读取一个外部 XML 文件,然后更新 HTML 中的数据内容。
<3>自定义标签和预定义标签
XML没有预定义的标签,允许创作者定义自己的标签和自己的文档结构。而HTML中使用的标签都是预定义的,而且只能使用在HTML标准中定义过的标签(比如<P1>,<h1>等等),浏览下一部分“XML树结构”中的实例可有助于理解。
HTML 旨在显示信息,而 XML 旨在传输信息。XML 不是 HTML 的替代。
XML树结构
XML文档形成了一种树结构,它从“根部”开始,然后扩展到“树叶”,且XML文档必须要有跟元素。实例如下:
第一行是XML的声明。它定义了XML的版本(1.0)和所用的编码(utf-8)。
第二行描述文档的根元素:书籍列表
第三行描述“书籍列表”的子元素:计算机书籍
接下来的三行描述子元素“计算机书籍”的子元素:书名,价格和简要介绍
最后两行分别为子元素“计算机书籍”和根元素“书籍列表”的结尾
XML元素
元素是开始标签、结束标签以及位于二者之间的所有内容。
在上例中,<书籍列表>和<计算机书籍>都拥有元素内容。<书名>只有文本内容,因为它进包含文本。
语法规则:
所有XML元素都须有关闭标签;
XML标签对大小写敏感,必须使用相同的大小写来打开标签和关闭标签;
XML必须正确地嵌套。例如:<b><i>This text is bold and italic</i></b>,由于 <i> 元素是在 <b> 元素内打开的,那么它必须在 <b> 元素内关闭;
XML文档必有根元素,也就是说XML文档必须有一个元素是所有其他元素的父元素;
XML的属性值须加引号,可以使用单引号,也可以使用双引号,但要始终保持一致;
XML属性
XML元素可以在开始标签中包含属性,类似HTML。但是属性必须加引号,不过单引号和双引号均可使用,比如一个的性别,peison标签可以这样写:
<person sex="female">
也可以这样写:
<person sex='female'>
元素VS属性
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。
没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。在 HTML 中,属性用起来很便利,但是在 XML 中,应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。
避免使用属性,而使用元素可以有以下好处:
- 属性无法包含多重的值(元素可以)
- 属性无法描述树结构(元素可以)
- 属性不易扩展(为未来的变化)
- 属性难以阅读和维护
XML实体引用
实体引用,其实就相当与转义符。例如“<”或“>”在XML中拥有特殊的意义,如果把这些符号放在XML元素中,容易引起混淆,为了避免混淆,提供了实体引用如下:
< | < |
| ||
> | > | 大于 | ||
& | % | 和号 | ||
' | ' | 单引号 | ||
" | " | 双引号 |
XML CDATA
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。在 XML 元素中,"<" 和 "&" 是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>
在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。结语
用XML来交换数据真的是相当方便,初步学习,已经感受到了XML的伟大,后续还得深入学习,Faight!