`
躁动的绵羊
  • 浏览: 95919 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XML教程——XML简介

阅读更多

什么是XML

XML即为可扩展的标记语言(eXtensible Markup Language)。XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。

XML是标记语言。理解XML,首先要理解标记。先说说HTML的标记(Markup),通俗地讲,它就是一种用来给文本添加标记的语言。在HTML里每个标志都是有确切含义的。例如,在HTML 中,标签〈B〉的含义是要求HTML浏览器将一段文本加粗表示,而标签〈CENTER〉的含义是告诉浏览器将这段文本在一行的中间显示。

而XML并非象HTML那样,提供了一组事先已经定义好了的标签,而是提供了一个标准,利用这个标准,你可以根据实际需要定义自己的新的置标语言,并为你的这个置标语言规定它特有的一套标签。准确的说,XML是一种源置标语言,它允许你根据它所提供的规则,制定各种各样的置标语言。


XML的产生

XML有两个先驱——SGML和HTML,这两个语言都是非常成功的标记语言,SGML的全称是标准通用化标记语言,它从80年代初开始使用。正如XML一样,SGML也可用于创建成千上万的标记语言,它为语法置标提供了异常强大的工具,同时具有极好的扩展性,因此在分类和索引数据中非常有用。目前,SGML多用于科技文献和政府办公文件中。SGML 非常之复杂,其复杂程度对于网络上的日常应用简直不可思议。不仅如此,SGML非常昂贵。HTML免费、简单,而且它获得了广泛的支持。它是一个非常简单的SGML语言,可以方便普通人的使用。1996年人们开始致力于描述一个置标语言,它既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。W3C于1998年2月批准了XML的1.0版本,一个崭新而大有前途的语言诞生了。


XML的优点

1.XML允许各种不同的专业(如音乐、化学、数学等)开发与自己的特定领域有关的标记语言。这就使得该领域中的人们可以交换笔记、数据和信息,而不用担心接收端的人是否有特定的软件来创建数据。

2.XML具有较好的保值性.过去40年来的大多数计算机数据都丢失了,不是因为自然损害或是备份介质的磨损,而只是因为没有人来写出如何读取这些数据介质和格式的文档。以不常用的格式保存的二进制数据,数据也许会永远地消失了。XML在基本水平上使用的是非常简单的数据格式。可以用100%的纯ASCII文本来书写,也可以用几种其他定义好的格式来书写。ASCII文本是几乎不会"磨损"的。

3.应用间交换数据.由于XML是非专有的并易于阅读和编写,就使得它成为在不同的应用间交换数据的理想格式.XML使用的是非专有的格式,不受版权、专利、商业秘密或是其他种类的知识产权的限制。XML的功能是非常强大的,同时对于人类或是计算机程序来说,都容易阅读和编写。因而成为交换语言的首选。

此外,相对于HTML,XML具有先天的优越性。
为了自己的浏览器增加一些特殊的显示效果,HTML加入了一些特殊的标记。日益增多的标签不但使HTML越来越庞大,浏览器的开发越来越复杂,还降低了不同浏览器之间的兼容性。尽管HTML的标签越来越多,其显示力却还远远不够。如果你希望非常精确地表现一些你自己的数据,可能你需要一些现在在HTML中尚不存在的标签。现在HTML内部结构的条理性越来越差。你写的HTML文件,甚至是那些专门的所见即所得工具自动生成的HTML文件,可能在语法上会错误百出,不过没关系,浏览器照样能读它。
现在有了XML,你终于可以自由地制定你自己的置标语言,而不必再念念不忘微软、 Netscape、W3C的首肯了。实际上,现在许多行业、机构都利用XML定义了自己的置标语言。比较早而且比较典型的是下面两个实例:

  • 化学置标语言CML (Chemistry Markup Language)
  • 数学置标语言MathML (Mathematical Markup Language)

一个简单的XML文档

现在让我们考察一个简单的XML文档:

<?xml version="1.0" standalone="yes"?>
<FOO>
Hello XML!
</FOO>

 

第一行是XML声明:

<?xml version="1.0" standalone="yes"?>

 

这是XML处理指令的例子。处理指令以<?开始,而以?>结束。在<?后的第一个单词是处理指令名,在本例中是xml。

XML声明有version和standalone两个特性。特性是由等号分开的名称-数值对。位于等号左边的是特性名,而其值位于等号的右边,并用双引号括起来。每一个XML文档都以一个XML 声明开始,用以指明所用的XML的版本。在上例中, version特性表明这个文档符合XML 1.0 规范。XML声明还可以有standalone特性,这告诉我们文档是否在这一个文件里还是需要从外部导入文件。在本例中,以及在以后的几章中,所有的文档都在一个文件里完成,因而 standalone特性的值要设置为yes。

再看剩下三行。总体上说,这三行组成了FOO元素。分开说,<FOO>是开始标记,而</FOO> 是结束标记,Hello XML!是FOO元素的内容。读者可能要问,<FOO>标记的意义是什么?回答是"你要让它是什么就是什么"。除了几百个预定义的标记之外,XML还允许用户创建所需的标记。因而<FOO>标记可以具有用户赋于的任何意义.同一个XML文档可以用不同的标记名编写,如:

<?xml version="1.0" standalone="yes"?>
<GREETING>
Hello XML!
</GREETING>

 

或是:

<?xml version="1.0" standalone="yes"?>
<P>
Hello XML!
</P>

 


XML标记的意义

标记有三类意义:结构、语义和样式。结构将文档分成元素树。语义将单个的元素与外部的实际事物联系起来。而样式指定如何显示元素。

结构只是表达文档的形式,而不管单个标记和元素间的差别。它们都指定文档具有一个非空的基本元素。标记的不同名称没有结构上的意义。语义的意义存在于文档之外,在作者的心中或是读者或是某些生成或读取这些文件的计算机程序中。例如,理解HTML但不理解XML的Web浏览器,可能会将段落的意义赋给<P>和</P>标记。讲英语的人可能会比<FOO>和</FOO>或<P>或</P>更容易理解<GREETING>和</GREETING>或是 <DOCUMENT>和</DOCUMENT>的意义。

正如"美丽"的意义存在于观察者心中。自然地,使标记的名称能够尽可能反映其包含的意义更好一些。许多学科,如数学和化学正在创建该学科的工业标准和标记集。

可以与标记相联系的第三类意义是样式意义。样式意义指定标记的内容如何在计算机屏幕上或是其他输出设备上展示。样式意义说明特定的元素是否是用粗体、斜体、绿色的24磅的字体还是其他字体加以表示。计算机在理解样式时比理解语义意义要好一些。在XML中,样式意义是通过样式单来施加的。(以后将会提到)


XML文件的整体结构

xml文件包括三部分:XML声明、处理指示(可选)、XML元素。XML文档的一个基本要求是形式良好的(well formed),一个形式良好的XML文档要包含这三个部分。

下面是一个完整的xml文档(程序1.1):

<?xml version="1.0" encoding="gb2312" ?>
<?xml-stylesheet type="text/xsl" href="mystyle.xsl"?>
<学生花名册>
  <学生>
    <名字>李华</名字>
    <籍贯>河北</籍贯>
    <年龄>15</年龄>
    <电话号码>62875555</电话号码>
  </学生>
  <学生>
    <名字>张三</名字>
    <籍贯>北京</籍贯>
    <年龄>14</年龄>
    <电话号码>82873425</电话号码>
  </学生>
</学生花名册>

 


处理指示

处理指示是用来给处理XML文件的应用程序提供信息的。所有的处理指示应该遵循下面的格式:

<?处理指示名 处理指示信息?>

 

例如这个处理指示:

<?xml-stylesheet type="text/xsl" href="mystyle.xsl"?> 

 

指定与了XML文件配套使用的样式单的类型为xsl及文件名为mystyle.xsl:


XML文件的实质内容——元素

元素是XML文件内容的基本单元。从语法上讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容。其形式是:

<标记>数据内容</标记> 

 

另外,元素中还可以再嵌套别的元素。比如数据内容可再扩展为

<标记1>数据内容1</标记1>
<标记2>数据内容2</标记2>
...
<标记n>数据内容1</标记n>

 

元素里还可以再嵌套元素,实现循环嵌套。最外层的元素称为根元素。一个xml文档只能有一个根元素。


字符数据与实体引用

一对标记之间出现的字符数据可以是任何合法的UNICODE字符,但不能包含字符"〈"。这是因为,字符"〈"被预留用作标记的开始符。

在XML中,起始和结束标记之间出现的所有合法字符都被忠实地传给XML处理程序。为了避免把字符数据和标记中需要用到的一些特殊符号相混淆,XML还提供了一些有用的实体引用。实体引用的作用是,当在字符数据中需要使用这些特殊符号时,我们采用它的实体引用来代替。这些特殊的XML实体引用包括:

            &lt; < 小于号 
            &gt; > 大于号 
            &amp; &  
            &apos; ' 单引号 
            &quot; " 双引号 

 

这样,如果我们需要在"示例"这个标记中出现文本

	"<姓名>张三</姓名>"

 

正确的写法应该是:

	〈示例〉<姓名>张三</姓名>〈/示例〉 

 

容易理解,字符"〈"的实体引用是必不可少的,为"〉"设立实体引用同样是为了避免与标记混淆,而字符"&"的实体引用则防止它与实体引用中开头所用的"&"相混淆。那么,我们什么时候需要用到剩下两个字符的实体引用呢?在标记中可以为标记设立属性,而XML规定属性值必须用"""括起来。因此,当属性值中出现字符"""时,需要将它用实体引用代替。请看下面的例子:

<STATEMENT VALUE = "She said, "Don t go there!""> 

 

正确的写法应该是:

<STATEMENT VALUE = "She said, "Don't go there!""> 

 


标记

正如我们开篇所讲,标记是XML语言的精髓。因此,标记在XML的元素中、乃至整个XML 文件中,占了举足轻重的位置。

XML的标记和HTML的标记在模样上大体相同,除了注释和CDATA部分以外,所有符号〈和符号〉之间的内容都称为标记。其基本形式为:

〈标记名 (属性名="属性取值")*〉

 

不过,XML对于标记的语法规定可比HTML要严格得多。

  1. 大小写有所区分
    在标记中必须注意区分大小写。在HTML中,标记〈HELLO〉和〈hello〉是一回事,但在XML中,它们是两个截然不同的标记。
  2. 要有正确的结束标记
    结束标记除了要和开始标记在拼写和大小写上完全相同,还必须在前面加上一个斜杠 "/"。因此,如果开始标记是〈HELLO〉,结束标记应该写作〈/HELLO〉。XML严格要求标记配对,因此,HTML中的<BR>、<HR>的元素形式在XML中是不合法的。不过,为了简便起见,当一对标记之间没有任何文本内容时,可以不写结束标记,而在开始标记的最后惯以斜杠"/"来确认。这样的标记称为"空标记"。例如,HTML中的标记〈HR〉在XML中的使用方式应该是:<HR/>。
  3. 标记要正确嵌套
    在一个XML元素中允许包含其它XML元素,但这些元素之间必须满足嵌套性。
  4. 有效使用属性
    最后要指出的是,标记中可以包含任意多个属性。在标记中,属性以名称/取值对出现,属性名不能重复,名称与取值之间用等号"="分隔,且取值用引号引起来。例如:
    <商品 类型 = "服装" 颜色 = "黄色"> 
    

    在这个例子中,"类型"和"颜色"是标记"商品"的属性,"服装"是属性"类型"的取值,"黄色"是属性"颜色"的取值。

需要特别注意的是,在XML中属性的取值必须用引号引起来,而在HTML中这一点并不严格要求。


CDATA

正象我们前面所说,我们可以把XML文件中除标记以外的所有内容都看作是字符数据,而把标记中的所有内容都看作置标。不过,也有一个例外。在一个特殊的标记CDATA下,所有的标记、实体引用都被忽略,而被XML处理程序一视同仁地当作字符数据看待。CDATA的形式如下:

	〈![CDATA[
		文本内容
	]]〉

 

聪明的读者可能已经猜出,CDATA的文本内容中是不能出现字符串"]]〉"的,因为它代表了CDATA数据块的结束标志。

在前面讲字符数据时,我们谈到过实体引用。可想而知,当你的文本数据中包含大量特殊符号时,你不得不通篇地使用实体引用,把本来很清晰的一段文字搞得乱七八糟。例如,我们要在"示例"元素中放入了一个这么XML程序。

                <联系人>
                <姓名>张三</姓名>
                <EMAIL>zhang@aaa.com</EMAIL>
                </联系人>

 

这时,如果没有CDATA,那么麻烦来了。这个元素需要写成下面的样子:

			<示例> 			
				<联系人>
                <姓名>张三</姓名>
                <EMAIL>zhang@aaa.com</EMAIL>
                </联系人>
			</示例> 

 

哇,你要把所有的标记都用实体引用改写,最后写出来的东西连你自己都看不懂了。为了避免这种不便,你可以把这些字符数据放在一个CDATA数据块中,这样不管它看上去是一个标记还是一个实体引用,这些数据统统被当作字符照单全收。于是,上面的元素就可以写为这个样子:

		<示例>
            <![CDATA[
                <联系人>
                <姓名>张三</姓名>
                <EMAIL>zhang@aaa.com</EMAIL>
                </联系人>
            ]]〉
		〈/示例〉

 

清楚多了吧!


注释

<p>象前一节的例子中那样,有些时候,你希望XML处理器能够把你在数据中引入的标记当作普通数据而不是真正的标记来看待。这时,CDATA为你助了一臂之力。另外还有些时候,就象在程序中引入注释一样,你可能希望在XML文件中加入一些用作解释的字符数据,并且希望XML处理器不对它们进行任何处理。这种类型的文本称作注释(COMMENT)文本。</p>

在HTML中,注释是用"〈!--"和"--〉"引起来的。在XML中,注释的方法完全相同。因此,下面是一个合法的XML(但不是形式良好的)文件: <示例>

    <!-- 一个XML的例子 -->
    <![CDATA[
        <联系人>
        <姓名>张三</姓名>
        <EMAIL>zhang@aaa.com</EMAIL>
        </联系人>
    ]]>
 </示例> 

 

不过,在XML文件中使用注释时,同样要遵守几个规则:

在注释文本中不能出现字符"-"或字符串"--",XML处理器可能把它们和注释结尾标志"-->"相混淆。

不要把注释文本放在标记之中。类似地,不要把注释文本放在实体声明中,也不要放在XML声明之前。记住,永远用XML声明作为XML文件中的第一行。

注释不能被嵌套。在使用一对注释符号表示注释文本时,要保证其中不再包含另一对注释符号。例如下面例子是不合法的:

	<!-- 一个XML的例子 
		<!--以上是一个注释-->
	--> 
 

 

最后再重申一遍,XML处理器对于注释中的一切内容都会视而不见,注释中出现的标记也一同被忽略。


形式良好的XML

为了使一个文档"形式良好",XML文档中的所有置标和字符数据必须遵守前几节中给出的规则。而且有几条关于如何把置标和字符数据相互联系起来的规则。这些规则总结如下:

  1. 文档的开始必须是XML声明。
  2. 含有数据的元素必须有起始标记和结束标记。
  3. 不含数据并且仅使用一个标记的元素必须以/>结束。
  4. 文档只能包含一个能够包含全部其他元素的元素。
  5. 元素只能嵌套不能重叠。
  6. 属性值必须加引号。
  7. 字符<和&只能用于起始标记和实体引用。
  8. 出现的实体引用只有&、<、>、'和"。

 

文章来源: http://www.ibm.com/developerworks/cn/xml/x-cert/part1/index.html

分享到:
评论

相关推荐

    xml实用技术教程—— 顾兵

    本教程“XML实用技术教程——顾兵”深入浅出地介绍了XML的基本概念、语法规范以及在实际应用中的技巧。 一、XML基础 1. XML结构:XML文档由元素、属性、文本、注释和处理指令等组成。元素是XML的核心,用于定义...

    xml——————表单资源

    XML,全称Extensible Markup Language,可扩展标记语言,是一种用于标记数据的结构化语言,尤其在Web应用程序、数据交换和配置文件等方面有着广泛的应用。它以简洁的文本格式存储和传输数据,允许用户自定义标签来...

    你所不知道的XML安全——XML攻击方法小结

    转载: 你所不知道的XML安全——XML攻击方法小结. XML可扩展标记语言,被设计用来传输和存储数据,其形式多样。某些在XML中被设计出来的特性,比如 XML schemas(遵循XML Schemas 规范)和documents type definitions...

    XML函数——expat

    Expat 是一个用C语言编写的XML解析器,它的设计思想是基于流式解析和事件驱动,这使得它能够高效地处理大型XML文件,而无需一次性将整个文件加载到内存中。这种特性对于处理大容量数据或者在资源有限的环境中(如...

    Android XML解析——Sax解析XML

    在Android开发中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它用于存储和传输结构化数据。XML解析是将XML文档转换为应用程序可以处理的数据的过程。本篇文章将重点讨论Android中的SAX(Simple ...

    XML快速入门教程——韦斯利著

    #### 一、XML简介 - **定义与作用**:可扩展标记语言(Extensible Markup Language,简称XML)是一种用于标记数据的语言,它被设计用来传输和存储数据。XML的数据是自描述性的,这意味着数据不仅包含实际的信息,还...

    Android之PULL解析XML文件——新浪微博客户端首页效果

    在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...

    《无废话XML》——两只老虎

    ### 一、XML简介与特点 #### 1.1 XML与HTML的区别 - **XML (Extensible Markup Language)**:可扩展标记语言,是一种用于定义结构化文档格式的标准。它允许开发者创建自己的标签,以便更灵活地描述数据。 - **...

    Android XML解析—— Pull解析XML(待完善)

    在Android开发中,XML是一种广泛使用的数据交换格式,用于存储和传输数据。XML解析是将XML文档转换为程序可以理解的结构化数据的过程。本文主要关注Android中的Pull解析方式来处理XML,这是一种轻量级、低内存占用的...

    XML网页设计实用教程——例题源码.rar

    《XML网页设计实用教程》是一本深入探讨XML技术及其在网页设计中应用的教材。它不仅涵盖了XML的基础概念,还延伸到了与之相关的JSP(JavaServer Pages)和AJAX(Asynchronous JavaScript and XML)技术。这个压缩包...

    XML解析器————

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。XML解析器是处理XML文档的核心工具,它读取XML文档并将其转换为程序可以理解的形式。Xerces-J是Apache...

    网站建设——XML教程CHM

    在"网站建设——XML教程CHM"中,可能涵盖了以下内容: 1. XML基础:解释XML的基本结构、语法和命名规则,包括元素、属性、实体、注释等概念。 2. DTD和XML Schema:介绍如何使用这两种验证工具来定义XML文档的结构...

    xml技术指南——————宝典

    XML(Extensible Markup Language)是一种用于标记数据的语言,它是SGML(Standard Generalized Markup Language)的简化版本,特别适合于在网络环境中使用。XML的设计目标是为了传输和存储数据,而非显示数据,这...

    musicxml3.0官方教程

    总的来说,MusicXML教程涵盖了如何开始使用MusicXML,文件的基础结构,如何与MIDI文件格式结合,以及如何表示和弦符号、指板记谱和打击乐等高级记谱特性。对于软件开发人员来说,这是一个全面的MusicXML指南,不仅...

    精通XML——基础概念、核心技术与典型案例 光盘资源(源程序)

    《精通XML——基础概念、核心技术与典型案例》书中所带光盘的各章例程以及数据库 第1章:XML的特征及应用场合简介 第2章:XML语法 第3章:XML名称空间 第4章:XML数据结构 第5章:XML路径查询技术 第6章:应用:...

    JavaEE5实用教程——基于WebLogic和Eclipse程序源代码

    综上所述,"JavaEE5实用教程——基于WebLogic和Eclipse程序源代码"涵盖了从基础组件到高级特性的广泛内容,旨在帮助开发者利用JavaEE5的简化特性,结合WebLogic Server的稳定性和Eclipse的高效开发工具,创建高质量...

    java解析xml——dom

    ### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...

    c++ xml解析工具——tinyxml

    TinyXML是C++编程语言中一个轻量级的XML解析库,它被设计为小巧、易用且易于集成到各种项目中。XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,尤其在软件开发中广泛用于配置文件、数据交换...

Global site tag (gtag.js) - Google Analytics