下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 XML简明教程

XML简明教程.PDF

XML简明教程

szsz06
2010-03-30 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《XML简明教程pdf》,可适用于IT/计算机领域

XML简明教程XML简明教程一、XML的背景和应用前景(一)起源XML(eXtendedMarkupLanguage)是从SGML(StandardGeneralizedMarkupLanguage)进化来的最初SGML是为了解决文档及其格式问题的一种标记语言所以非常的复杂和难以使用那时计算机的应用水平还处在很低的阶段并且那时人们只需要传递和显示一些简单的数据。因此年TimBernerslee依据SGML开发出一种超文本格式就叫HTML(HyperTextMarkupLanguage)非常的简单。当计算机的应用水平也大幅度的提高的时候人们已经对太简单的HTML开始不满意因此又开始对其进行修改、升级就这样HTML从一直升到的版本扩展了许多的命令实际上也是为了让HTML解决更多的问题但是因为HTML本身的缺陷为了解决更多的问题是不是会把简单的HTML变成一个非常复杂的难以理解的语言就连现在看一个HTML的源文件都会头大好几圈再加上HTML是把数据和显示格式一起存放的如果我们只想使用数据而不需要格式可以想象分离这些数据和格式是多么的困难。而随着Internet的发展年月WC公布了XML版本立即成为计算机史上一个重要的里程碑。XML包括XML元数据文件、Schema文件、XSLT显示文件、XLL链接、Xpath等一系列相关部分但是对于不是计算机方面的专业人士来讲最好只看它的元数据文件而把别的问题交给开发和制作人员这样就可以让非专业人士脱离看懂那些头疼的术语的痛苦。在此就先说说XML的特点:电子数据交换(EDI)灵活的开发因为XML是数据和格式分离设计的所以XML元数据文件就是纯数据的文件这样就可以使用同一个数据源显示多种样式了。而使用HTML的话每显示一种式样就必须重新把数据和格式混到一起这是一件很痛苦的事情。XML采用的TAG是自己定义的这样我们的数据文件的可读性就能大大提高也不再局限于HTML文件那些标准的TAG了。而且因为XML支持Unicode所以我们就可以使用中文标记(TAG)是不是感觉很自由呢?看看这样一个存放职员数据的XML数据文件:<职员><姓名>于青<姓名><性别>女<性别><年龄><年龄><学历><学历><教育经历><毕业学校>北京大学<毕业学校><入学时间><入学时间><毕业时间><毕业时间><专业>中文<专业><教育经历><职员>看到这个文件感觉是不是很棒?这样的文件不需要使用很复杂和专业的工具就可以增加、修改和编辑(使用微软的记事本就可以做到这些)而且大部分人都可以使用可以让一个非计算机的专业人士在分钟内学会这就是一个XML元数据文件的样子。当然XML文件也不象HTML那样可以写的不完整XML必须写的中规中矩(wellformed)否则XML的解析器就会报错。面向对象的特性XML的文件是以树状方式存储同时也有属性这非常符合面向对象方面的编程而且也体现了以对象方式存储ORACLE数据库就使用了这种面向对象的特性但是ORACLE数据库的根本是关系型的数据库因此速度和稳定性都有一定的问题而且特别的复杂所以大家基本上是很少使用它的这一特性深怕跳到坑里去!缺陷世界上永远也不会出现完美的语言的XML也是一样它也有很多的缺陷虽然它是树状存储的搜索的效率极高但是问题不是在搜索而是在于目前它的插入和修改!二、XML基础(一)XML术语在学习XML之前我想先给大家介绍一些XML使用的术语。平常我们学习新的语言时总会遇到许多难以理解的术语在这里就先介绍一些主要的给大家。元素(Elements):代表XML文档中的每一个组件包含字符、元素或者两者皆有允许有空元素(emptyelement)。属性(Attributes):放在元素后面的数据代表这个元素的另一种特性和特征。统一编码(Unicode):一种字符集包括了全世界各种语言中有用的字符。实体:“文本片”实体也像一个缩写一个实体可以是一个字符也可以是一个文档的数据是XML文本的基本单位。标记(Markup):像标记(TAG)、实体引用(Entityreference)和声明这样的构件。样式表(XSL):描述XML的元数据文件格式的语言(因为CSS对于XML来讲不够用)。序言(Prolog):关于文档实例表现形式的信息。文档实例(Documentinstance):以元素的层次结构组织的实际文档数据。(二)XML语法简介.看一个简单的例子这是一个关于库存物品清单的简单例子大家可以从中发现XML的许多特性并且可以体会到XML的元数据文件是非常清晰易读的:<!XML文件示例><xmlversion=""encoding="GB"><库存清单><!这里就是注释><库存物品><名称>毛巾<名称><规格单位="cm">*<规格><生产厂家>中国棉纺厂<生产厂家><生产日期><生产日期><数量单位="条"><数量><进货价单位="元"><进货价><零售价单位="元"><零售价><库存物品><库存物品><名称>碗<名称><规格单位="cm">*<规格><生产厂家>中国搪瓷厂<生产厂家><生产日期><生产日期><数量单位="个"><数量><进货价单位="元"><进货价><零售价单位="元"><零售价><库存物品><库存物品><名称>筷子<名称><规格单位="个">*<规格><生产厂家>中国搪瓷厂<生产厂家><生产日期><生产日期><数量单位="把"><数量><进货价单位="元"><进货价><零售价单位="元"><零售价><库存物品><库存清单>看过了XML语言的基本格式下面将详细讲解XML元数据文件的各个组成部分实际就上面这些而言是非常简单的当然我们要想更清楚的了解和学习XML就必须清楚地知道这些定义的意义。.声明(Declaration)XML数据文件的定义不象HTML那样自由它是非常严格的缺少一个就会出错!因为每个XML的解析器第一步要做的事情就是检查XML文件是否合格就是“wellformed”所以大家看到第一句是这样些的:<xmlversion=""encoding="GB">注意的是:不能漏掉此句否则解析器不予解析的!当然里面的encoding可以不用写缺省是Unicode在此对XML使用的字符编码作一下说明大家都应该知道中文和英文的区别吧呵呵有人说了这也太简单了实际上平时有区别就罢了结果闹到计算机上真是比较麻烦大家用过古董DOS的就知道使用汉字在计算机上是一件多么困难的事情别人个字母就可以搞定汉字却要好几万个。现在的计算机的发展虽然神速可国际化的问题却一直存在况且不属英语语系的国家也都有此类问题因此美国的各大电脑厂商组成了一个Unicode促进会结合ISO的字库标准推出了Unicode这个编码可以满足绝大多数语系的需要!.元素(Elements)和属性(Attributes)<元素名属性名=”属性值”><子元素>元素的数据<子元素><元素名>大家看上面的这个例子就能很形象的理解什么是元素什么是属性但是需要注意的是元素的大小写是不一样的也就是说<t><t>和<T><T>不是同一个元素。还有就是元素里的数据只要是合法的就会完全忠实的成为数据就如:<元素名>这是一个<元素名><!这是另一个><元素名>这是一个<元素名><!这又是另一个><元素名>这是一个<元素名>大家注意到没有第一、二只差一个空格第三个则是多了一个回车符但是这三个数据却是不同的数据因此大伙在写这些数据的时候可一定要小心!如果大家对于面向对象熟悉的话一定清楚类也是有属性的而XML自然也是包括属性的XML的元素是拥有属性的而且可以有许多属性并且属性值必须使用单引号或双引号包含起来。.注释(Comments)如果大家编写过程序就一定知道看别人的程序是一件非常痛苦的事情。如果别人的程序是没有注释的话那简直就成了一种惨无人道的折磨呵呵所以在文档中嵌入关于文档和标记的信息就是很有帮助的。这样不但可以帮助别人也可以帮助自己。在XML的注释里是这样的:<!啊这就是帮助>在这个注释中间可以放入除了“”符号以外的所有字符这稍稍有些不习惯我们往往会使用这个符号来分离不同组成部分的文档在XML的文件里则需要改一改了。.预定义实体当我们创建XML时候有些符号例如“<”等和XML相重的标记譬如下面的:<文章><段落><html><head><title><title><head><body><h>我们那嘎都是活雷锋<h><b>老张开车去东北……撞了<b><body><html><段落><文章>这样是肯定行不通的HTML和XML的定义相重因为XML有种预定义的实体如下:<>apos‘“这样再写这些文件就会象下面这样:<文章><段落>htmlheadtitletitleheadbodyh我们那嘎都是活雷锋hb老张开车去东北……撞了bbodyhtml<段落><文章>解析器会自动把这些符号转换成我们所要的文件但是这样实在是不好看懂所以就又有了这个CDATA。.CDATA从上面那一节的例子可以看出使用预定义实体实在是难以看懂但是有了这个CDATA之后我们就可以让分析器把那些特殊数据当作普通的数据来处理了!CDATA的定义如下:<!CDATA内容>将上节的例子拿来使用:<文章><段落><!CDATA<html><head><title><title><head><body><h>我们那嘎都是活雷锋<h><b>老张开车去东北……撞了<b><body><html>><段落><文章>这样解析器就可以解释在这个符号中间的特殊字符了!三、CHEMA简介(一)Schema的引入通过上几章介绍相信大家对XML的基本语法已经有了一个基本了解。XML本身的语法很严谨也就是要求格式必须严整包括区分大小写、整个文档有且只有一个根、需要序言等等。在符合格式化良好的要求以后就可以写出规则整齐、可以通过内置XML解析器的浏览器解析XML文档了。但XML本身也相当的灵活在符合基本语法的前提下可以任意的编写各种符合XML语法要求的文档这也正是XML可扩展的灵活性所在但同时也产生了问题比如要写一个说明个人信息的XML文档可以这样写:<xmlversion=“”encoding=”GB”><resume><name>张立东<name><sex>男<sex><age><age><birthday><birthday><address>北京市海淀区<address><resume>也可以这么写:<xmlversion=“”encoding=”GB”><resume><name>张立东<name><sex>男<sex><age><age><birthday><year><year><month><month><day><day><birthday><address>北京市海淀区<address><resume>上面的两个文档对于人来说是很容易看懂的但对于机器来说它们就无法判断<birthday><birthday>和<birthday><year><year><month><month><day><day><birthday>中的内容是否相同了。这就需要一个相应的“约束”来规定一个固定的格式这样机器才可以正确的识别、比较和处理。正如没有规矩难以成方圆一样XML这么强大的语言自然也有这方面的考虑这也就是DTD和Schema所要完成的功能。(二)DTD和Schema提到Schema就必须提到DTD。最早建立对SGML约束的是DTD而XML又是SGML的超集所以DTD由于历史的原因也可以对XML本身进行约束比如:每个节点可以含有的元素、元素的个数等等。但它也有很多的局限性如不能定义元素值的范围、学习起来有一定的难度(要学习一种新的语法)等等。而最新的XML约束标准就可以轻松的满足要求这就是Schema。Schema与DTD不同DTD本身有自己的语法和要求而Schema是完全符合XML语法的只要对XML有初步的了解就很容易对Schema上手。说了这么多还是首先让我们通过一个例子来看看Schema是如何定义XML结构的吧:<xmlversion=""encoding="GB"><Schemaxmlns="urn:schemasmicrosoftcom:xmldata"xmlns:dt="urn:schemasmicrosoftcom:datatypes"><ElementTypename="name"><ElementTypename="sex"><ElementTypename="age"><ElementTypename="address"><ElementTypename="month"><ElementTypename="year"><ElementTypename="day"><ElementTypename="birthday"content="eltOnly"><elementtype="year"><elementtype="month"><elementtype="day"><ElementType><ElementTypename="resume"content="eltOnly"><elementtype="name"><elementtype="sex"><elementtype="age"><elementtype="birthday"><elementtype="address"><ElementType><Schema>下面对上面的例子做一个简单的讲解:行是一个XML序言从这行也可以看出Schema是符合XML基本语法要求的。-是对Schema名域的一个定义。(由于我们这里是一个XML的入门文章有关XML的名域问题可以参考相应的XML文档。)定义一个名字为name的元素。-分别是对sex、age、address、month、year、day元素的定义。-是对birthday元素的一个定义但birthday这个元素比较特殊它其中又包含了year、month和day三个元素。其中content这个属性是对元素中的数据进行说明的。根据content中的数据eltOnly可以知道这个birthday元素的数据只能够由元素构成。-是对resume这个元素的定义resume这个元素是由name、sex、age、birthday、address这几个元素构成的。从上面的例子可以知道如何对一个简单的元素进行定义也可以知道一个由其他元素组成的元素如何定义。通过由元素组成的元素的这种定义就可以定义一个嵌套结构的XML树的基本结构。到这里读者对Schema已经就有了一个基本的了解也该是我们给Schame下一个简单定义的时候了:XMLSchema是用来描述XML元素和属性的。它包括属性和元素类型说明是可以为XML元素和属性提供数据的类型校验模块。四、xslt简介了解XML的基本语法、Schema的语法还远远不够XML是对数据和数据结构的存储而Schema是对XML数据类型的定义。直到这里还没有对XML数据的显示进行处理。虽然可以通过内置有XML解析器的浏览器直接对XML数据进行查看但毕竟看到的只是以树状结构显示的XML数据。如果要把XML数据以漂亮的形式显示出来就需要XSLT帮忙了。XSLT可以把XML处理成HTML形式输出、WAP形式输出甚至也可以是Word文档的格式。其中最常用到的还是HTML的格式下面讲解中用到的所有例子都以HTML的转换格式为例子。那就不说废话了还是先看一个XSLT的例子吧!这个XSLT用到的一个XML文档文档如下:<xmlversion=""encoding="GB"><xml:stylesheettype="textxsl"href="sxltxslt"><resumes><resume><name>张立东<name><sex>男<sex><age><age><birthday><year><year><month><month><day><day><birthday><address>北京市海淀区<address><resume><resume><name>张三<name><sex>男<sex><age><age><birthday><year><year><month><month><day><day><birthday><address>山西省<address><resume><resume><name>李四<name><sex>男<sex><age><age><birthday><year><year><month><month><day><day><birthday><address>山东省<address><resume><resumes>注:在上面的XML文档中多了下面的一句:<xml:stylesheettype="textxsl"href="sxltxslt">这一句就是对XSLT的引用其中href中的内容是对具体XSLT文档位置的指定有关sxltxslt中的内容就是下面要介绍的XSLT例子的内容。有关如何对XMLXLST、Schema的使用和测试可以参考“一个应用了xml、schema和xlst的例子”部分。对这个XML文档进行转换处理的XSLT文档如下:<xmlversion=""encoding="GB"><xsl:stylesheetversion=""xmlns:xsl="http:wwwworgTRWDxsl"><xsl:templatematch=""><HTML><HEAD><TITLE>个人简历<TITLE><HEAD><BODY><xsl:foreachselect="resumesresume"><P><TABLEborder=""><CAPTIONstyle="fontsize:fontweight:bold">个人简历<CAPTION><TR><TH>姓名<TH><TD><xsl:valueofselect="name"><TD><TH>性别<TH><TD><xsl:valueofselect="sex"><TD><TH>生日<TH><TD><xsl:valueofselect="birthdayyear">年<xsl:valueofselect="birthdaymonth">月<xsl:valueofselect="birthdayday">日<TD><TR><TR><TH>地址<TH><TDcolspan=""><xsl:valueofselect="address"><TD><TR><TABLE><xsl:foreach><BODY><HTML><xsl:template><xsl:stylesheet>XML的序言从第一条语句可以看出XSLT也是符合XML语法的。XSLT的名域。Xsl:stylesheet是XSLT的根元素xsl是XSLT的名域标识。所以都要在XSLT的语句前面加上xsl:来表明是XSLT的语句。<xsl:templatematch="">是XSLT语言的匹配模式主要是和引用它的XML文档的根进行匹配。其中是代表XML文档根的含义。例如:个人简介中的name可以用resumesresumename的方式进行引用。(由于这里只是对XSLT入门的一个初步介绍对有关XML路径想详细了解的读者可以参考XML文档的XPATH部分。)-可以直接输出这部分是符合HTML语法的信息结构HTML文档的开始部分和head的定义。<xsl:foreachselect="resumesresume">是XSLT语言的选择模式是循环的对所有的resumesresume元素和这个元素所包含的子元素进行处理。-可以直接输出符合HTML的语法结构。<TH>姓名<TH><TD><xsl:valueofselect="name"><TD>在这一行中有HTML的语句和也有XSLT的语句。其中<xsl:valueofselect="name">也是属于选择模式的语句可以直接把select选中的元素内容提取处理处理以后的结果应该是:<TH>姓名<TH><TD>张立东<TD>。分别是对其他部分信息的显示处理其中也包含了部分的HTML语句。<xsl:foreach>语句的结束部分。-HTML语句。<xsl:template>语句的结束部分。也就是对整个XML文档处理的结束。因为每个XML文档只有一个根而这条语句是对根的部分处理所以是对整个XML文档处理的结束。XSLT文档的结束。经上面对这个简单例子的介绍大家对XSLT对XML文档的处理可能已经有了一个基本的了解可以简单的通过XSLT对XML进行处理啦。在结束这个部分之前对XSLT的语法做一个简单的小结:可以大致的把模式语言分为三种:选择模式<xsl:foreach>、<xsl:valueof>和<xsl:applytemplates>测试模式<xsl:if>和<xsl:when>匹配模式<xsl:template>选择模式语句将数据从XML中提取出来这是一种简单获得数据的方法。这几个标记都有一个select属性选取XML中特定结点名的数据。测试模式是对数据的一个判断然后根据判断和匹配的结果进行处理。有些和程序语言中的判断语句和多判断语句形似。匹配模式是一个可以单独列出来的XSLT语句片断可以完成对一个特定部分的XSLT处理。有些和程序设计中的子程序相似。五、一个应用了xml、schema和xlst的例子通过上面的介绍大家可能都已经跃跃欲试想自己做一个XML方面的小应用了。那么在这里就满足大家的要求举一个比较全面的有实际意义的例子。假如有一个订单要处理订单的基本内容包括客户的信息和产品信息两个部分。客户信息主要由客户姓名、电话、传真、地址组成。产品信息由编号、名称、规格、价格、购买数量组成。为了写一个标准的XML文档首先要写一个Schema来对XML文档进行约束:以下内容为程序代码:以下内容为程序代码:<xmlversion=""encoding="GB"><Schemaxmlns="urn:schemasmicrosoftcom:xmldata"xmlns:dt="urn:schemasmicrosoftcom:datatypes"><ElementTypename="姓名"><ElementTypename="电话"><ElementTypename="传真"><ElementTypename="地址"><ElementTypename="编号"><ElementTypename="名称"><ElementTypename="规格"><ElementTypename="价格"><ElementTypename="购买数量"><ElementTypename="客户"content="eltOnly"><elementtype="姓名"><elementtype="电话"><elementtype="传真"><elementtype="地址"><ElementType><ElementTypename="产品"content="eltOnly"><elementtype="名称"><elementtype="规格"><elementtype="价格"><elementtype="购买数量"><ElementType><ElementTypename="订单"content="eltOnly"><elementtype="客户"><elementtype="产品"><ElementType><ElementTypename="全部订单"content="eltOnly"><elementtype="订单"><ElementType><Schema>可以把上面的Schema文档存储为:Schxml在下面的xml文档中会用到这个Schema。下面是根据上面的约束写的一段XML文档:以下内容为程序代码:以下内容为程序代码:<xmlversion=""encoding="GB"><xml:stylesheettype="textxsl"href="Sxlsxslt"><全部订单xmlns="xschema:Schxml"><订单><客户><名称>张立东<名称><电话><电话><传真><传真><地址>北京市海淀区<地址><客户><产品><名称>扳手<名称><价格><价格><规格>中<规格><购买数量><购买数量><产品><订单><全部订单>下面是对XML进行处理的Sxlsxslt的内容:以下内容为程序代码:以下内容为程序代码:<xmlversion=""encoding="GB"><xsl:stylesheetversion=""xmlns:xsl="http:wwwworgTRWDxsl"><xsl:templatematch=""><HTML><HEAD><TITLE>全部订单<TITLE><HEAD><BODY><h>订单内容<h><xsl:foreachselect="全部订单订单"><TABLEborder=""><TR><TH>客户名称:<TH><TD><xsl:valueofselect="客户名称"><TD><TH>电话<TH><TD><xsl:valueofselect="客户电话"><TD><TH>传真<TH><TD><xsl:valueofselect="客户传真"><TD><TR><TR><TH>地址<TH><TDcolspan=""><xsl:valueofselect="客户地址"><TD><TR><TABLE><TABLEborder=""><TR><TH>产品名称:<TH><TD><xsl:valueofselect="产品名称"><TD><TH>价格<TH><TD><xsl:valueofselect="产品价格"><TD><TH>规格<TH><TD><xsl:valueofselect="产品规格"><TD><TR><TR><TH>购买数量<TH><TDcolspan=""><xsl:valueofselect="产品购买数量"><TD><TR><TABLE><xsl:foreach><BODY><HTML><xsl:template><xsl:stylesheet>把上面的Schema和XSLT按照例子中的名字存储到磁盘然后把XML的内容存储成为文件放到相同的子目录下然后用IE进行解析处理就会看到符合Schema要求、经过XSLT处理的文档了#六、后记以上只是简单介绍了XML的前端应用部分如果各位对XML的后台开发还感兴趣的话就需要了解XML更加复杂的部分也需要知道XML的解析器是如何解析XML的。限于篇幅只能给大家一个简单的介绍。XML文件的解析器目前分为两种:一个是DOM(DocumentObjectModel)一个是SAX。这两个解析器都是可以解析XML的但是在解析XML的方式上有很大的不同DOM是一次性的把XML文件读入到内存里解析处理速度很快而SAX则是一部分一部分的解析所以资源占用较少大伙了解了这两种特性后就可以有选择的使用解析器了。目前Microsoft和Java都支持这两种解析器因此大家可以放心的使用。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/10

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利