XML学习笔记01

来源:互联网 发布:淘宝怎么解绑手机号码 编辑:程序博客网 时间:2024/05/16 06:43

声明:大部分资料来自XML中国论坛(http://www.xml.net.cn)的初学教程,作为个人学习与备用作用,如果产生纠纷,请留言,我会马上做出处理

    一、XML概述

可扩展置标语言XML(eXtensible Markup Language)是一种置标语言。
它依赖于描述一定规则的标签和能够读懂这些标签的应用处理工具来发挥它的强大功能。

eXtensible:可扩展的
Markup Language:置标语言

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

一个XML系统应该有一下3个部分:
1、置标声明,即置标的语法,具体由DTD或者Schema实现
2、具体的XML文件,含有已被置标的具体数据
3、置标的含义,即样式单,对置标数据的具体显示,有CSS和XSL两种

    二、XML文件的结构

    (1)XML的逻辑结构
一个XML文件最基本的构成是:
XML声明
处理指示(可选)
XML元素

例子:

[1] <?xml version="1.0" encoding="GB2312" standalone="no"?>
[2] <?xml-stylesheet type="text/xsl" href="mystyle.xsl"?>

[3] <专有名词列表>
[4]     <专有名词>
[5]         <名词>XML</名词>        
[6]         <解释>XML是一种可扩展的源置标语言,它可用以规定新的置标规则,并根据这个规则组织数据</解释>
[7]         <示例>
[8]             <!-- 一个XML的例子 -->
[9]             <![CDATA[
[10]                <联系人>
[11]                <姓名>张三</姓名>
[12]                <EMAIL>zhang@aaa.com</EMAIL>
[13]                </联系人>
[14]            ]]>
[15]        </示例>
[16]    </专有名词>
[17]</专有名词列表>

在本例中,[1] 是一个XML声明,[2] 是处理指示,[3]——[17] 是文件中的各个元素
除此以外,上面例子中出现的其它逻辑要素还有:
[8] 是注释
[9]——[14] 是CDATA
在[5]行的“<名词>XML</名词>”中,“<名词>”“</名词>”是标记,“XML”是字符数据

    (1.1)XML声明
完整的XML声明:
<?xml version = "1.0"
standalone = "no"
encoding = "GB2312"?>

version属性:是必须的,表明XML版本号。
standalone属性:表明该XML文件是否和一个独立的置标声明文件配套使用。“yes”表明置标声明在该XML文件里面,“no”表明存在一个文件作为此XML文件的置标声明文件(也可能没有)
encoding属性:XML采用的编码,所有的XML语法分析器都要支持8位和16位的编码标准。
    常用的有:
    简体中文码:GB2312
    繁体中文码:BIG5
    西欧字符: UTF-8

    (1.2)元素
元素是XML文件内容的基本单元。从语法上讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容。其形式是:
〈标记〉数据内容〈/标记〉
从文件头的XML声明之后开始一直到文件尾,包含了文件中所有的数据信息,称为根元素。例如上例中的“专有名词列表”。
XML中开始和结束标记之间的文字称作“字符数据”,而把置标内的标示文字称作“标记”。

    (1.2.1)字符数据:
一对标记之间出现的字符数据可以是任何合法的UNICODE字符,但不能包含字符“〈”。这是因为,字符“〈”被预留用作标记的开始符。在XML中,起始和结束标记之间出现的所有合法字符都被忠实地传给XML处理程序。
为了避免把字符数据和标记中需要用到的一些特殊符号相混淆,XML还提供了一些实体引用。

字符
 实体引用

字符实体引用
>&gt;
<&lt;
&&amp;
"&quot;
&apos;

在数据中入出现上述字符,应用其实体引用代替

    (1.2.2)标记:
除了注释和CDATA部分以外,所有符号“〈”和符号“〉”之间的内容都称为标记。

XML中对于标记的语法规定

1、标记必不可少
任何一个形式良好的XML文件中至少要有一个元素。也就是说,标记在XML文件中是必不可少的。

2、大小写有所区分
在标记中必须注意区分大小写。在HTML中,标记〈HELLO〉和〈hello〉是一回事,但在XML中,它们是两个截然不同的标记。

3、要有正确的结束标记
结束标记除了要和开始标记在拼写和大小写上完全相同,还必须在前面加上一个斜杠“/”。因此,如果开始标记是〈HELLO〉,结束标记应该写作〈/HELLO〉
当一对标记之间没有任何文本内容时,可以不写结束标记,而在开始标记的最后惯以斜杠“/”来确认。这样的标记称为“空标记”。如〈HELLO/〉

4、标记要正确嵌套
在一个XML元素中允许包含其它XML元素,但这些元素之间必须满足嵌套性。

5、标记命名要合法
标记应该以字母、下划线“_”或冒号“:”开头,后面跟字母、数字、句号“.”、冒号、下划线或连字符“-”,但是中间不能有空格,而且任何标记不能以“xml”起始。另外,最好不要在标记的开头使用冒号,尽管它是合法的,但可能会带来混淆。
在XML1.0标准中允许使用任何长度的标记,不过,现实中的XML处理程序可能会要求标记的长度限制在一定范围内。

6、有效使用属性
最后要指出的是,标记中可以包含任意多个属性。在标记中,属性以名称/取值对出现,属性名不能重复,名称与取值之间用等号“=”分隔,且取值用引号引起来。例如:
<商品 类型 = "服装" 颜色 = "黄色">
属性命名的规范与标记命名规范大体相似,需要注意有效字母、大小写等一系列问题。不过,在必要的时候,属性中也可以包含空白符,标点和实体引用。
最后要说明一点,属性的所有赋值都被看作是字符串。因此,如果你的处理程序读到下面这段XML标记:
<圆柱体 半径=“10” 高=“13”>
程序应该能够把字符串“10”和“13”转化为它们所代表的数字。

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

在前面讲字符数据时,我们谈到过实体引用。可想而知,当你的文本数据中包含大量特殊符号时,你不得不通篇地使用实体引用,把本来很清晰的一段文字搞得乱七八糟。
例如:
<示例>
    &lt;联系人&gt;
    &lt;姓名&gt;张三&lt;/姓名&gt;
    &lt;EMAIL&gt;zhang@aaa.com&lt;/EMAIL&gt;
    &lt;/联系人&gt;
</示例>

可以由以下表示:
<示例>
            <![CDATA[
                <联系人>
                <姓名>张三</姓名>
                <EMAIL>zhang@aaa.com</EMAIL>
                </联系人>
            ]]>
</示例>

这样就清楚多了。

    (1.4)注释
注释是用“〈!--”和“--〉”引起来的,使用注释有一下几点注意:
1、在注释文本中不能出现字符“-”或字符串“--”,XML处理器可能把它们和注释结尾标志“-->”相混淆。
2、不要把注释文本放在标记之中,否则,它就不是一个“形式良好的”XML文件了。类似地,不要把注释文本放在实体声明中,也不要放在XML声明之前。
2、注释不能被嵌套。

    (1.5)处理指示
处理指示是用来给处理XML文件的应用程序提供信息的。XML声明就是一个处理指示。
所有的处理指示应该遵循下面的格式:
〈?处理指示名 处理指示信息?〉
例如在开头的例子中,我们使用一个处理指示来指定与这个XML文件配套使用的样式单的类型及文件名:
<?xml-stylesheet type="text/xsl" href="mystyle.xsl"?>

    (1.6)总结
简单重复一遍,一个XML文件通常以一个XML声明开始,后面通过XML元素来组织XML数据。XML元素包括标记和字符数据。为了组织数据更加方便、清晰,我们还可以在字符数据中引入CDATA数据块,并可以在文件中引入注释。此外,由于有时需要给XML处理程序提供一些指示信息,XML文件中可以包含处理指示。

    (2)XML的物理结构
从物理结构上讲,XML文件归根结底是由一组“实体”构成的。
简单地说,实体充当着和别名类似的角色。即,一个简单的实体名称可以用来代表一大段文本内容。
假如你为你的信件署名定义了一个实体lettersign,它代表下面这一大段文本:
    张三
    某网络公司销售部门
    北京市海淀区中关村88号,100000

那么以后当你的XML文件中出现“信件”元素时,你可以这样写:
    〈信件〉
        〈收件人〉李四〈/收件人〉
        〈主题〉hello〈/主题〉
        〈正文〉hello!&lettersign ;〈/正文〉
    〈/信件〉

所有的XML文件都包含了一个“根实体”,又称作“文件实体”。这个实体是由XML本身给出的,无须显式定义就可以使用,它指的其实就是整个文件的内容。除此之外,你可能还须用到其它一些实体,这些实体由你在文件类型DOCTYPE中给出定义。

    (2.1)实体的两种类型:

实体包括两种类型:一般实体和参数实体。

1、一般实体

我们前面说到的那个信件署名就是一般实体。定义一般实体的格式如下:
<!ENTITY 实体名 "文本内容"〉

关于刚才的信件署名的实体定义如下:
<!ENTITY lettersign
"张三
某网络公司销售部门
北京市海淀区中关村88号,100000"〉

你也可以指定一个实体代替一个外部文件的内容,此时要使用SYSTEM这个关键字。例如:
<!ENTITY lettersign SYSTEM http://www.mydomain.com/lettersign.xml

在这个例子中,XML处理器将用指定文件的内容来替换实体指示。

2、参数实体

与一般实体相同,参数实体既可以是内部的也可以是外部的。不过,参数实体只用在DTD中。参数实体的格式与一般实体很类似,只不过中间要加上“%”符。
<!ENTITY % 实体名 "文本内容"〉

    (2.2)实体的使用
实体的使用包括两部分:实体声明和实体引用。
1、实体声明
对于实体的声明应该放在文件类型DOCTYPE中。DOCTYPE一般放在文件头(即XML声明和DTD)之后,XML元素之前。这样一来,XML文件就变为下面的形式:
<?xml version="1.0"?>
<!DOCTYPE 文件根元素名 [
    实体声明部分
]>
<文件根元素名>
    具体数据内容
</文件根元素名>

2、实体引用
说到实体引用,前面我们曾用“&lt;”代表字符“〈”。这就是一个实体引用。
实体引用指的是引用一个在实体声明中已经声明过的一个实体。实体引用的形式很简单:
&实体名;

不过,实体引用有以下几点规则一定要注意:
    1、在引用XML实体之前,必须已经在XML文件中对此实体进行过声明; 在实体引用中不能出现空格。也就是说,& lettersign;和&letterhead ;的用法都会引起错误。
    2、尽管在一个实体中可以再引用其它实体,但是不能出现循环引用。也就是说,一个实体不能引用它自己;同样,也不能出现实体A引用实体B,然后实体B再反过来引用实体A的情况。
    3、实体引用不能在DOCTYPE声明中出现。
    4、实体引用的文本必须是形式良好的XML。

同样,参数实体的引用与一般实体的引用大同小异,只是要把实体前的符号&换为%就可以了,形式是:
%实体名;

原创粉丝点击