使用XML+XSLT结构的可能性
来源: 阅读:732 次 日期:2015-08-26 15:29:21
温馨提示: 小编为您整理了“使用XML+XSLT结构的可能性”,方便广大网友查阅!

1 XML和XSL简介

1.1 XML

XML是可扩展标记语言(EXtensible Markup Language)的缩写,它被设计用来传输和存储数据,并于1998年2月成为W3C的推荐标准。

名单

更为专业的描述是这样的:在转换的过程中,XSLT用Xpath来定义源文档中与一个或多个预先确定的模板相匹配的部分。当找到了一个匹配时,XSLT就将源文档中的匹配部分转换成结果文档;而源文档中不与任何一个模板匹配的部分最终在结果中保持不变。(摘自developerWorks)

2.1 结构示例

这里使用DNF的一个专题举个例子。此专题的访问地址是:http://dnf.qq.com/act/a20090710wcg/

这是一个赶工的专题,页面代码没太多的参考性,只是拿出来做个示例,并且由于专题比较简单,XSLT文档只用到了部分XSLT语句,属于简单应用。首页使用的是HTML,因为XML不在默认首页文件格式之列,因此只有二级页采用了XML+XSLT结构。对于其中“代表队介绍”这个二级页面:

XML文档:http://dnf.qq.com/act/a20090710wcg/players.xml

XSLT文档:http://dnf.qq.com/act/a20090710wcg/xslt/player.xsl,http://dnf.qq.com/act/a20090710wcg/xslt/commens.xsl

XML和XSLT是树状结构的,在浏览器中可以看到。XSLT文档中,以”<xsl:”开头的就是XSLT语句,”select”属性里的内容则是Xpath表达式(Xpath表达式不只存在于select属性里),可以看到里面也包含了许多HTML代码。XML和XSLT代码是强制要求闭合。

其中player.xml文档调用了player.xsl文档,XML文档不做解释了。简述一下XSLT的文档结构含义。

文档第一排是一条XML声明语句;第二行stylesheet语句声明XSLT版本和命名空间,所有的其他XSLT语句都必须包含在此语句内;第三行是import语句,调用具有公共模块的文档commens.xsl(commens.xsl文档包括顶部白色banner条,页面header块,导航,脚部声明四个模块);第四行是output语句,表明将XML文档转换为HTML文件并输出;然后通过template语句建立根模块。紧接着的就是HTML代码了,<body>标签后是一个call-template语句,调用顶部白色banner条。HTML代码就不再解释了。接着的XSLT代码是两个call-template语句,调用HTML页面header块和导航模块。跟着是两个for-each语句循环相同的结构,并通过Xpath选取XML数据,一个循环用于生成“个人赛”资料,另一个用于生成“团队赛”资料,中间有很多value-of语句,用于调用XML相应节点的值。接着是call-template语句,调用脚部声明模块,最后是页面的一些标签闭合。

3 XML+XSLT结构的优势

3.1 数据交换

XML本身是用于网络上数据交换的语言,我可以调用互联网里的其他XML文件(当然,要经过作者同意),通过编写XSLT或者其他语言脚本(如ActionScript、JavaScript等),变成自己作品上的内容。

XML 是独立于软件和硬件的信息传输工具,它的简单使其易于在任何应用程序中读写数据。我们在使用XSLT转换XML为HTML的同时,此XML文档还可以被其他各种脚本或开发语言调用。

3.2 代码大小

XSLT有个很大的优点是模块化,如同JavaScript里的function一样,需要时调用,同时也可以传递参数。这样,网站各个页面所具有的相同部分(比如导航,版权声明等,甚至可以是HTML里的<head>标签)就可以单独提出来,封装在一个模块内,每个页面的这个部分就可以替换为一条调用对应模块的代码。

XSLT同时拥有循环语句,可以对代码里相同的结构进行循环(比如li、tr等),同时遍历应用这个结构的XML数据,避免了因拥有相同结构的数据而重复编写代码。

XSLT文档可以相互调用,延长了文档的使用寿命,你可以调用以前写过的XSLT来使用里面的模块,不用再次编写,你甚至可以调用别人写过并发布在互联网上的文档(只要作者同意),这样在一定程度上节约了精力和成本。

XML+XSLT结构大大减少了代码大小,并且随着XML数据量和页面数量的增加而越发明显。当然,数据量大过头对XML不是什么好事。

3.3 代码维护

利用XSLT的模块功能,对于页面相同部分的修改变得很简单,不用像以前一样打开N个文件批量替换,我们只需要对XSLT文件的模块代码进行修改。虽然也可以利用JavaScript编写各个页面的相同部分,然后调用,但代码的可读性远远比不上XSLT的模块来得直接。

利用XSLT的循环代码,修改数据的结构不再变得痛苦。想象当你要把一个庞大的table结构的数据变成li结构时,批量替换已无法满足要求。如果使用XSLT文档,并利用循环代码,你只需要修改一个循环的公共结构就OK了。

3.4 节约访问资源

对于现在腾讯的游戏官网,比如首页的各种新闻列表,是使用JavaScript调用的,即服务器接到请求后,再开始从数据库里查找新闻,然后返回。

我们其实可以换一种方式,即后台事先根据页面需要生成XML文档,并保持每隔一个固定时间更新一次XML文档,然后使用XSLT输出页面,这样就在一定程度上节省了页面下载时间。

同时,由于后台直接生成XML文档,不再因为N个新闻列表而向服务器发送N个请求,减少了页面的请求数。

4 使用XML+XSLT结构的可能性

4.1 浏览器支持

几乎所有主要的浏览器均支持 XML + XSLT结构的页面。Firefox从1.0.2开始支持XML和XSLT;Netscape从8.0开始支持XML和XSLT;Opera从9.0开始支持XML和XSLT;IE从6.0开始支持 XML、XSLT和Xpath(资料来源于W3School)。

当然还有Safari和Chrome,貌似这两个浏览器是支持的(至少我安装的这两个浏览器没发现啥问题)。

4.2 编写难度

相对于HTML的编写,XML+XSLT的过程要复杂一些。毕竟要先写好XML、HTML、CSS和JavaScript文档,然后再在HTML文档的基础上编写XSLT文档,多个页面还需要根据文档进行模块提取,以便各文档调用。

从整个过程来看,确实复杂一些,但这个复杂也是“先苦后甜”的写照。完成XSLT文档后,可以节省很多资源,也对以后的维护有很大的好处。

4.3 后台开发

需要程序员将数据库里的数据按页面需要导出为相应的XML文件,或者直接使用XML存储数据(但比如新闻之类的信息数量很庞大,使用XML直接存储数据会降低效率)。各种开发语言都能将数据库中的数据输出为XML文档,相信难度不大。

4.4 竞争

XSLT当然不是唯一能转换XML文档的方式,其他语言脚本也可以实现与XSLT相同的功能。但是,其他语言脚本的使用远不及XSLT来的直接。XSLT可以直接使用HTML元素,并且可以使用Xpath很直观的选取XML文档节点。而且在XML+XSLT结构中,XML文档的调用很方便,只需在XML文档里写一条xml-stylesheet调用语句。

4.5 SEO

这可能是XML+XSLT结构最郁闷的地方了,网上貌似还没有使用此结构替换HTML对于SEO影响的定论。但各种迹象表明,使用XML+XSLT结构会在一定程度上对SEO造成不良的影响。

4.6 适用性偏向

由于XML本身是作为描述和传输信息的文档,注定了XML+XSLT结构更适合于信息展示类的页面,比如新闻,相册等,所以游戏官网很适合使用此结构来完成。而功能性较多的页面就不适合使用此结构,比如注册,发布系统等。

暴雪公司的所有游戏官网均采用XML+XSLT结构。

星际争霸2:http://www.starcraft2.com/

魔兽世界:http://www.worldofwarcraft.com/

暗黑破坏神3:http://www.blizzard.com/diablo3/

5 综上所述

XML+XSLT结构目前并不流行,虽然XML已广泛应用,但XSL由于各种原因并未能普及。对于腾讯的游戏官网建设,由于首页的各类信息调用涉及到很多产品或系统的接口,而广告和新闻也是还是使用JavaScript调用的方式生成,XML+XSLT结构的全面应用在短期来看是不大可能的,目前也只有用于纯静态的图片视频展示,资料站等。XML+XSLT结构的普及任重而道远。

才疏学浅,个人愚见,仅供亵玩。

更多信息请查看IT技术专栏

更多信息请查看网络编程
手机网站地址:使用XML+XSLT结构的可能性
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map