浅析XML

一、什么是 XML

XML 是可扩展标记语言 eXtensible Markup Language
多用来传输和储存数据

  • XML 是一种标记语言
  • XML 是用来传输数据的语言而不是显示数据
  • XML 语言需要自行定义标签并且具有自我描述性
  • XML 在意的是数据内容(传输信息)
  • HTML 在意的是数据的外观(显示信息

举例说明:XML 文档实例 Jani 写给 Tove 的便签

<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

上面的这条便签具有自我描述性。它包含了发送者和接受者的信息,同时拥有标题以及消息主体。但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。

通过 XML 可以发明自己的标签

  • 上述例子中标签中没有在任何 XML 标准中定义过<to>和<form>XML 中没有预定义的标签相
  • 对比 HTML 中的标签全都是通过 HTML 定义过的标签
  • XML 允许创业者定义自己的标签和自己的文档结构

二、XML 的用途

XML 把数据从 HTML 分离

首先举一个例子当你需要在 HTML 文档中显示动态数据,那么每当数据改变的时候,都要花费我们大量的时间去编辑 HTML。通过 XML 数据能够给储存在独立的 XML 文件中。这样我们就可以专注于使用 HTML/CSS 进行显示和布局,并且可以在修改底层数据的时候不在需要对 HTML 进行改变。 通过使用几行 JavaScript 代码,我们可以读取一个外部 XML 文件,并更新我们的网页数据内容。

XML 简化数据共享

XML 数据以纯文本格式进行存储,因此提供了一种独立与软件和硬件的数据储存方法。这就可以让创建不懂应用程序可以共享的数据变得更加容易

简化数据传输

互联网上的不兼容的系统之间交换数据对于程序员来说是一件很费时的事情,这时 yogaXML 交换数据就降低了从不兼容的应用程序中读取数据的复杂性

三、XML 的树结构

XML 文档形成了一种树的结构,它从 “根部” 开始,然后扩展到 “枝叶”。
树结构是通常被称为 XML 树,并且可以很容易地描述任何 XML 文档。
通过采用树状结构,你可以知道所有从根开始的后续的分行及支行

一个 XML 文档实例

XML 文档使用简单的具有自我描述性的语法:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

第一行是 XML 的生命。它定义 XML 的版本(1.0)和所使用的编码(ISO-8859-1 = Latin-1 / 西欧字符集)。

实例 XML 中的几本书

<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>

实例中的根元素是<bookstore>。文档中的所有<book>元素都被包含在<bookstore>中。<book>元素中有四个子元素:<title>、<author>、<year>、<price>。

四、XML 的语法

所有 XML 都必须有一个关闭标签

在 HTML 中,有些元素不必须有一个关闭标签:
而在 XML 中,省略关闭标签是非法的

XML 是大小写敏感的语言
XML 必须正确嵌套
XML 文档必须有根元素
XML 属性值必须加引号
实体引用

在 XML 中,一些字符拥有特殊的意义
如果我们把字符”<” 放到 XML 元素中,会发生错误,这是因为解析器会把它当做新元素的开始。
这样会产生 XML 错误:

<message>if salary < 1000 then</message>

为了避免这个错误需要用实体引用来代替”<” 字符

<message>if salary &lt; 1000 then</message>

在 XML 中,有五个预定义的实体引用:
在 XML 中,只有字符 “<” 和“&”确实是非法的,大于号是合法的但是用实体引用来代替它是好的习惯
<=>< ; >=>> ; &=>& ; '=>' "=>"

XML 中的注释

XML 中注释和 HTML 中的注释相同

在 XML 中,空格会被保留

HTML 会把多个连续的空格字符裁减合并为一个
XML中则会完整保留所有的空格,包括空格的数量。

XML 以 LF 储存换行

在 Windows 程序中,换行通常是以一对字符来存储的:回车符(CR)和换行符(LF)。
在 Unix 和 Mac OSX 中,使用 LF 来存储新行。

什么是 XML 元素?

XML 元素指的是从(且包括)开始标签到(且包括)结束标签的部分。
一个元素可以包含:

  • 其他元素
  • 文本
  • 属性
  • 或混合以上所有

XML 元素的命名规则

  • 名称可以包含字母、数字以及其他字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字母 xml(不区分大小写的任何 xml 组合)开始
  • 名称不能包含空格
    避免 “-” 字符。如果您按照这样的方式进行命名:”first-name”,一些软件会认为您想要从 first 里边减去 name。
    避免 “.” 字符。如果您按照这样的方式进行命名:”first.name”,一些软件会认为 “name” 是对象 “first” 的属性。
    避免 “:” 字符。冒号会被转换为命名空间来使用(稍后介绍)。

XML 元素是可扩展的

请看下面的XML实例

<note>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note>

这时我们可以在文档中添加一些额外的信息

<note>
<date>2008-01-10</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

我们即使加上了这些内容程序不会因此而崩溃或者中断,这个程序仍然可以找到 XML 中的 to、from 以及 body 元素,并且产生同样的输出。XML 的优势之一,就是可以在不中断应用程序的情况下进行扩展。

XML 属性

在 XML 的元素中,一个 XML 元素可以有一个或多个属性。
属性是 XML 元素的一部分,每一个元素可以有多个独特的属性。属性提供了有关 XML 元素的详细信息 XML 属性始终都是一个 名称 / 值 的对
在 HTML 中,属性提供有关元素的额外信息。

<img src="computer.gif">
<a href="demo.html">

属性通常提供不属于数据组成部分的信息。在下面的实例中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:

<file type="gif">computer.gif</file>

XML的属性必须使用双引号,如果属性本身包含双引号,则可以使用单引号,或者可以使用字符实体。

XML 元素 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 中,尽量避免使用属性,如果信息感觉起来很像数据,尽量使用元素。

属性的缺点

  • 属性不能包含多个值(元素可以)
  • 属性不能包含树结构(元素可以)
  • 属性不容易扩展(为未来的变化
  • 属性难以阅读和维护。请尽量使用元素来描述数据。

元数据

元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>

上述的 id 属性仅仅只是一个标识符,用于标识不同的标签。他并不是便签数据的组成部分。
在这里笔者想说的是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

XML 错误会终止您的程序

XML 文档中的错误会终止我们的 XML 程序。
W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文件。理由是:XML 软件应当轻巧快速,具有良好的兼容。
如果使用 HTML,创建包含大量错误的文档是有可能的(比如忘记添加结束标签),其中一个主要的原因是 HTML 浏览器相当的臃肿,兼容性也很差,并且他们有自己的方式来确定当发现错误时文档应该显示为什么样子。使用 XML 时,这种情况不应当存在.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341