序在很多时候,学习一门技术都是让人很痛苦的一件事。
不仅因为技术本身,还有资料的来源也是很匮乏的。
当我们兴致勃勃的准备开始学习技术,发现原来只有英文文档或者纸媒介的中文文档的时候,会让人倍感沮丧。
当我在开始学习XML技术的时候,也遇到了同样的问题。
于是决定将自己学习的内容记录下来,方便学习。
当然,在下水平有限,而且在没有专业校对和审核的情况下,这样的文档可能会显得比较稚嫩。
如果大家发现了任何错别字,错误的描述,错误的格式......,都可以将这些问题发送到我将不胜感激。
Terry Zhang2009/06/131为什么要学XML�XML是一种通用的数据交换格式�许多系统的配置文件都使用XML格式�配置文件就是记录应用程序的配置信息的文件。
�传统配置文件的格式:DBServer=192.168.0.100Database=empPort=1443Username=testPassword=111可以看到,在传统的配置文件中,一行就代表一个配置信息。
这些配置信息之间是平行的关系,很难表达出具有层级关系的配置,例如国家,省,市这样的配置信息。
XML格式的配置文件可以很容易的解决层级关系的配置。
通过父节点和子节点的配置就能满足这样的功能。
看一个简单的XML文件的配置:<书架><书><书名>红楼梦</书名><作者>曹雪芹</作者><售价>45.00元</售价></书><书><书名>西游记</书名><作者>吴承恩</作者><售价>50.00元</售价></书></书架>�JSP文档也逐渐向XML语法格式过渡我们可以看到,JSP规范中指定可以使用XML的语法来编写JSP页面,越来越多的应用程序也支持XML的语法格式。
�许多公司内部的系统也会使用XML文件来作为内部数据交换的格式。
�在日常生活中也会经常看到XML格式的文件。
�掌握XML是软件开发人员一项基本技能。
2XML的起源与作用�在线电子商务活动交换的电子文档必须采用某种标准格式,统一电子文档的标准规范是电子商务的基础。
�HTML不适合作为电子商务的文档标准。
�SGML(Standard Generaliz ed Markup Language)过于复杂,无法适应网络上的日常应用。
�W3C于1998年2月批准了XML(Extensible Markup Language)的 1.0版本。
XML是对SGML的简化,语法与HTML非常相似。
�XML具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。
�XML文档很容易创建,并且结构清晰,不仅让人能够明白,还让计算机业能明白。
�XML作为一种公订的、开放的标准,不受知识产权的限制。
3XML简介3.1XML与HTML的比较HTML将数据和其显示效果混在一起,它是一种表现技术;XML文档只是存储了数据和描述了数据之间的关系,没有规定该如何显示数据。
HTML的格式要求比较松散;而XML是非常严格的标记语言。
HTML的标记集合是固定的;而XML只是提供了一个标准,可以按照这个标准来定义自己专用的标记。
XML允许粒度更新,HTML不支持类似的功能。
XML不是HTML的升级,也不是HTML的替代品。
HTML目前已经不再是WEB标记的标准,它已经被XHTML所取代,XHTML是HTML和XML的混合物,是XML在WEB领域的应用。
3.2XML的基本语法�文档声明在一个完整的XML文档当中,必须包含一个XML文档声明语句,这个语句必须是XML文档的第一行。
1.最简单的声明语法:<?xml version="1.0"?>在开始的左尖括号,问号和xml字母之间,还有结尾的问号和右尖括号之间不能有空格。
version 属性用于指定当前xml文档所遵循的xml规范的版本号。
这个属性必须指定。
2.用encoding属性说明文档的字符编码<?xml version="1.0"encoding="GB2312"?>如果没有指定encoding属性,那么xml的处理程序将编码默认为UTF8或者UTF16。
3用standalone属性说明文档是否独立<?xml version="1.0"encoding="GB2312"standalone="yes"?>如果XML文档需要和DTD文件,或者其它文件配合使用,那么需要把这个属性设置为no,表示它不能够单独使用。
如果同时指定了encoding属性和standalone属性,那么standalone属性必须在encoding属性之后。
�元素定义1.一个XML元素由一个标记来定义,包括开始和结束标记以及其中的内容,例如:<书名>红楼梦</书名>2.一个元素中可以嵌套若干个子元素3.格式良好的XML文档必须有且仅有一个根元素,其它元素都是这个根元素的子孙元素。
4.空元素可以不使用结束标记,但必须在起始标记的结束界定符(>)前面加一个正斜杠(/)字符,例如:<img src="test.gif"/>5.所有元素必须合理的嵌套,绝对不允许标签交叉,例如:<b>test<i>test2</b></i>6.元素标记名称规范1)可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:2)区分大小写,例如,<P>和<p>是两个不同的标记。
3)不能以数字或“_”(下划线)开头。
4)不能以字符组合xml(或XML、或Xml等)开头。
5)不能包含空格。
6)名称中间不能包含冒号(:)。
7.元素的标记名称建议1)不要使用“.”,因为在很多程序语言中,“.”用于引用对象的属性。
2)最好不要使用减号(-),而以下划线(_)代替,以避免与表达式中的减号(-)运算符发生冲突3)名称尽量简短,以减少XML文档的大小。
4)名称的大小写尽量采用统一标准,要么全部大写,要么全部小写。
5)名称可以使用非英文字符,例如中文,但是有的软件可能不支持非英文字符,在使用时应考虑这种情况。
�属性定义1.一个标签可以有多个属性,每个属性都有它自己的名称和取值。
例如:<书单位="元">100</书>2.属性值一定要用双引号(")或单引号(')括起来。
3.属性的名称与标签有相同的命名规范。
4.属性可以被改用成子元素来表示同样的信息,例如:<书><单位>元</单位><价格>100</价格></书>�注释1.用“<!--注释-->”这样的格式加入注释。
2.XML声明之前不能出现注释。
3.一对注释符号之中不能包含另一对注释符号,例如:<!--注释......<!--局部注释-->......-->�空格和换行处理在HTML中连续出现的多个空格或换行它们总是会显示成一个空格。
但是在XML中:1.对于XML中的标签以外的所有空格和换行,XML解析程序都要一个个如实地交给后面的程序去处理。
2.下面两段内容的意义是不一样的的:第一段:<晚餐>番茄炒蛋</晚餐>第二段<晚餐>番茄炒蛋</晚餐>3.由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让源文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。
�CDATA区问题:XML文档中包含类似“Elements look like<this>”的文本,其中的“<this>”将被解析程序解释成一个元素,而人们实际想要的是“<this>”所表示的原始文本。
要满足以上功能,就需要使用到CDATA区了:1.CDATA区全称为character data,以“<![CDA TA[”开始,以“]]>”结束,在两者之间嵌入不想被解析程序解析的原始数据,解析器不对CDATA区中的内容进行解析,而是将这些数据原封不动的交给后面的程序。
2.CDATA区中的起始和结束处有何没有空格和换行时有区别的。
3.“<![CDA TA[”不能写成“<![cdata[”或“<![Cdata[”之类的。
4.CDATA区内部不能出现“]]>”。
�特殊字符在XML中有以下5个预定义的特殊字符:<<小于>>大于&&和号''单引号""双引号�处理指令(processing instruction)1.处理指令是processing instruction的中文翻译,通常简称PI,用来为处理XML文档的应用程序提供指示信息。
2.处理指令以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。
3.XML分析器把处理指令原封不动地传递给应用程序,由应用程序来解释这个指令,按照它所提供的信息进行处理。
例如在某个XML文档中可以包含下面的语句来告诉浏览器要使用simple.css控制其显示效果:<?xml-stylesheet type="text/css"href="simple.css"?>当然,如果要显示XML文件,更好的选择不是使用CSS而是使用XSLT(eXtensible Stylesheet Language Transformations),XSLT比CSS更加完善,如果需要使用XSLT来控制显示,则需要加入下面的处理指令:<?xml-stylesheet type="text/xsl"href="simple.xsl"?>4XML约束模式4.1XML约束模式基础4.1.1格式良好的XML计算机程序在处理XML文档之前,首先必须能够解析出XML文档内容中的各个元素的相关信息。
要让计算机程序解析出XML文档内容所表述的信息,XML文档更应该严格遵循一定的语法。
遵守XML基本语法规则和规范的XML文档就可以称之为“Well-formed XML”,中文意思就是“格式良好的XML”。