1-xml

第一章 XML语言

1 简介

XML是一种基于文本的可扩展标记语言(text-based Extensible Markup Language)。XML是一种通用的、扩展性好的语言,可用于任何编程语言或者平台之上。因此,XML被广泛的用于大型网络系统和应用之中。XML语言有以下三大优势。

  1. XML是一种结构化、可扩展的语言。开发人员可以根据自身需求创建和定义XML结构。
  2. XML语言可用于存储数据。XML语言通过文档结构、标签名称和属性来存储数据。但是,XML并不用于数据表达。因此,XML语言能被用于各种不同的应用场景之中,应用程序可根据自身需求,将数据内容转换为所需要的方式表达出来。
  3. XML是一个公开、开放的标准(Public Standard)。她最初由万维网联盟组织(World Wide Web Consortium, or W3C)提出。目前XML已成为一个开放性的标准。

小水滴还提供了在线XML文档校验和格式化工具,欢迎使用。

2 基础知识

我们将从一个简单的例子来介绍XML语言的基础知识。一个XML文档必须由两个部分组成;第一行为XML文档的声明部分,后续内容为该XML文档的主体部分。

<?xml version="1.0" encoding="utf-8"?>
<course>
   <name>XML语言</name>
   <description>一门介绍XML语言的入门课程。</description>
   <teacher>小水滴</teacher>
</course>

2.1 声明

XML文档的声明一般出现在第一行,用于明确指出该文档遵守的XML规范标准的版本号,和文档的字符编码。在上面的例子中,该文档遵守XML 1.0规范,使用了"UTF-8"编码规范。

图一 XML声明

图一 XML声明

2.2 树状结构的主体部分

XML文档的主体内容是一个树状结构的文档。每个节点的内容由一个开始标签和结束标签标识。开始标签与结束标签的标签名称必须相同。在这个树状结构的文档中,子节点的全部内容包含在父节点的内容之中。一个XML文档只能有一个根节点;这个根节点可包含一个或者多个孩子节点。然后每个孩子节点也可以包含一个或者多个孙子节点。以此类推,一个XML文档可能包含着一个庞大的树形结构数据。

从上述的例子来看,该XML文档包含了一个根节点course;它的开始和结束标签为<course>和</course>。(注意:结束标签比开始标签多了一个斜杠符号)。根节点course包含了三个孩子节点(name, description, 和teacher)。在name节点中,“XML语言”是name节点的内容。

图二 XML主体内容

图二 XML主体内容

2.3 属性

每个标签(或者每个节点)还可以包含一个或者多个属性。属性的名称和值出现在开始标签中。例如:我们可以在上述的例子中,在teacher的标签上加一个属性id,如下所示。

<?xml version="1.0" encoding="utf-8"?>
<course>
   <name>XML语言</name>
   <description>一门介绍XML语言的入门课程。</description>
   <teacher id="T0011">小水滴</teacher>
</course>

属性名称与属性值必须成对出现。属性值必须包含在一对双引号之中。属性的基本格式如下。

<tagName attr1="value1" attr2="value2" attr3="value3"></tagName>

2.4 XML字符实体(XML Character Entity)

从上述的例子可以看出,一些符号(例如:小于号<和大于号>)对于XML语言有着特殊的意义。在XML文档的数据中不能直接使用这些字符,而应使用她们的预定义字符实体(Predefined Character Entity)数字字符实体、或者名称字符实体。这三种字符实体在XML语言中起到的作用十分相似:她们用于表示一些特殊的字符,只不过她们的表示方式不同而已(这与编程语言中的转义字符(Escaped Character)类似)。下面的表格中使用了预定义字符实体和数字字符实体表示了五个常见的特殊字符。

字符名称特殊字符预定义字符实体十进制数字字符实体十六进制数字字符实体
小于号<&lt;&#60;&#x3C;
大于号>&gt;&#62;&#x3E;
Ampersand&&amp;&#38;&#x26;
双引号"&quot;&#34;&#x22;
Apostrophe'&apos;&#39;&#x27;

2.5 注释

XML语言也支持注释功能。放在<!--和-->之间的内容会被认为是注释。在读取XML文档时,注释内容会被忽略。注意:XML语言不支持嵌套注释,即不能将一个注释放在另一个注释之中。

2.6 CDATA区

CDATA是Character Data的缩写,意思是指在CDATA区域中的数据不是标记语言(Markup Language),而是纯的字符。当解析器在解析XML文档时,不能将CDATA中的数据当作XML语言处理。因此,在CDATA中无需使用上述的字符实体来表达特殊字符。

<?xml version="1.0" encoding="utf-8"?>
<course>
   <name>XML语言</name>
   <description>
       <![CDATA[
           一门介绍XML语言的入门课程。
       ]]>
   </description>
   <teacher>小水滴</teacher>
</course>

如上例所示,CDATA区由开始标签<![CDATA[开始,直至结束标签]]>。中间的内容为普通的文本。CDATA也有两种特殊情况。其一,CDATA的文本中不能包含结束标签]]>;其二,CDATA区不能嵌套。

3 批评的声音

在XML受到广泛欢迎的同时,人们也指出了XML语言的不足之处。XML语言最明显的一个缺点是过于冗余和过于复杂,无论是从开发者或者维护者的角度来看,或者从程序读取和解析XML文档的角度来看,使用XML的效率较低。因此,许多开发人员选择使用JSON格式或者YAML语言来存储和交换数据。

4 结语

本章介绍了XML的基础知识。因为XML的易用性、通用性、和易扩展性,她被广泛的应用于大型的系统中。XML还被用于存放数据、导入导出数据、网络数据交换等应用场景中。因此,XML语言是从事编程和项目实战的入门级知识。

下一章

注册用户登陆后可留言

Copyright  2019 Little Waterdrop, LLC. All Rights Reserved.