初遇XML+XSLT结构

 

 

XMLXSL简介

1.1 XML

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

qqe688aae59bbee69caae591bde5908d2

1-1 XML代码示例

上面是一小段XML代码,与HTML最大的区别在于,XML被设计为传输和存储数据,其焦点是数据的内容,并且XML的标签是自定义的;而HTML被设计用来显示数据,其焦点是数据的外观。XML是与描述、传输信息相关的,而HTML是与显示信息相关的(资料来源于W3School)。

1.2 XSL

XSL是扩展样式表语言(EXtensible Stylesheet Language)的缩写,是一种用于以可读格式呈现 XML 数据的语言。XSL包含XSLTXpathXSL-FO三个部分:XSLT用于转换XML文档,Xpath用于选取XML元素和属性,XSL-FO用于格式化XML文档。

本文只涉及到XSL里的XSLTXpathXSLT199911月被确立为W3C标准,用于将XML文档转换为HTML、文本或者XML三种类型的文档(本文仅涉及到转换为HTML文档的情况),而XpathXSLT的主要元素之一。XSL-FO就一边寂寞去吧。

XML+XSLT结构的实现

XML+XSLT结构输出页面可以理解为,使用XML存储数据,使用XSLT编写页面结构,感觉上像把HTML拆开了。XML文档在组织数据的同时,通过语句调用XSLT页面。在XSLT页面中,HTML语句编写基础结构,Xpath选取XML相应的数据节点,然后通过XSLT语句将这两者结合起来。

e69caae591bde5908d 

更为专业的描述是这样的:在转换的过程中,XSLTXpath来定义源文档中与一个或多个预先确定的模板相匹配的部分。当找到了一个匹配时,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.xslhttp://dnf.qq.com/act/a20090710wcg/xslt/commens.xsl

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

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

文档第一排是一条XML声明语句;第二行stylesheet语句声明XSLT版本和命名空间,所有的其他XSLT语句都必须包含在此语句内;第三行是import语句,调用具有公共模块的文档commens.xslcommens.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语句,调用脚部声明模块,最后是页面的一些标签闭合。

XML+XSLT结构的优势

3.1 数据交换

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

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

3.2 代码大小

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

XSLT同时拥有循环语句,可以对代码里相同的结构进行循环(比如litr等),同时遍历应用这个结构的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个请求,减少了页面的请求数。

使用XML+XSLT结构的可能性

4.1 浏览器支持

几乎所有主要的浏览器均支持 XML + XSLT结构的页面。Firefox1.0.2开始支持XMLXSLTNetscape8.0开始支持XMLXSLTOpera9.0开始支持XMLXSLTIE6.0开始支持XMLXSLTXpath(资料来源于W3School)。

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

4.2 编写难度

相对于HTML的编写,XML+XSLT的过程要复杂一些。毕竟要先写好XMLHTMLCSSJavaScript文档,然后再在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结构。

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

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

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

综上所述

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

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

 

以下为自己调试的代码

XMLTest.xml 页面

 

<?xml version="1.0" encoding="gb2312" ?>

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

<languages>

  <languages_charset>gb2312</languages_charset>

  <Reset>重填</Reset>

  <Submit>提交</Submit>

  <Password>密码</Password>

  <ID>用户名</ID>

</languages>

XsLTTest.xslt 页面

 

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"

>

  <xsl:output method="html" encoding="gb2312" omit-xml-declaration="yes" indent="yes" standalone="yes"/>

  <xsl:template match="/">

 

    <html>

      <META http-equiv="Content-Type" content="text/html;">

        <xsl:attribute name="charset">

          <xsl:value-of select="languages/languages_charset"/>

        </xsl:attribute>

      </META>

      <body>

        <table cellspacing="2" cellpadding="2" border="0">

          <tr>

            <td>

              <xsl:value-of select="languages/ID" />

            </td>

            <td>

              <input type="text"/>

            </td>

          </tr>

          <tr>

            <td>

              <xsl:value-of select="languages/Password" />

            </td>

            <td>

              <input type="text"/>

            </td>

          </tr>

          <tr>

            <td>

              <input type="submit" >

                <xsl:attribute name="value">

                  <xsl:value-of select="languages/Submit" />

                </xsl:attribute>

              </input>

            </td>

            <td>

              <input type="reset" >

                <xsl:attribute name="value">

                  <xsl:value-of select="languages/Reset" />

                </xsl:attribute>

              </input>

            </td>

          </tr>

        </table>

      </body>

    </html>

 

  </xsl:template>

</xsl:stylesheet>

 

 

最后用浏览器直接查看XMLTest.xml 就可以看到效果了

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java Web开发是一种使用Java语言和相关技术开发Web应用程序的方法。本文将详细介绍Java Web开发中的三个重要技术:XMLXSLT、Servlet和JSP,并结合实例应用进行深入剖析。 首先是XML(eXtensible Markup Language)技术。XML是一种可扩展的标记语言,被广泛应用于数据的传输和存储。在Java Web开发中,XML常用于描述数据的结构和格式,例如配置文件、数据交换等。我们可以使用Java的DOM或SAX解析器来解析和操作XML文档,实现数据的读取和写入。 其次是XSLT(eXtensible Stylesheet Language Transformations)技术。XSLT是一种基于XML的转换语言,用于将XML文档转换为各种输出格式,如HTML、PDF等。在Java Web开发中,XSLT通常与XML一起使用,通过XSLT样式表的定义,实现数据的转换和呈现。 接下来是Servlet技术。Servlet是Java Web开发中的核心组件,用于处理Web请求和生成动态Web内容。通过继承javax.servlet.Servlet接口,我们可以实现自己的Servlet类,并通过在web.xml配置文件中进行映射,使其能够响应特定URL的请求。Servlet可以处理HTTP请求和响应,完成业务逻辑处理和数据操作,并生成动态的HTML或XML内容返回给客户端。 最后是JSP(JavaServer Pages)技术。JSP是一种动态网页技术,它允许我们在HTML(静态内容)中嵌入Java代码(动态内容)。JSP页面在运行时被翻译为Servlet,并在服务器端执行。通过使用JSP技术,我们可以方便地将业务逻辑和展示逻辑分离,提高开发效率。 综上所述,Java Web开发中的XMLXSLT、Servlet和JSP技术都是非常重要的。通过深入剖析和实例应用,我们可以更加深入地了解它们的原理和用法,提高开发效率和代码质量。 ### 回答2: Java Web开发是基于Java语言开发Web应用程序的一种方式。XMLXSLT、Servlet和JSP是Java Web开发中常用的技术组件。 XML(可扩展标记语言)是一种用于描述数据的标记语言,它具有结构清晰、易于扩展和跨平台的特点。在Java Web开发中,XML被广泛用于描述Web应用程序的配置信息,例如Web.xml文件用于配置Servlet和其他组件。 XSLT(可扩展样式表语言转换)是一种用于将XML数据转换为其他格式(如HTML、XML、文本等)的技术。在Java Web开发中,通过使用XSLT,可以将XML数据转换为适合在Web页面中展示的格式。 Servlet是Java编写的用于处理HTTP请求和生成HTTP响应的类。它是JavaWeb开发中最基础和核心的技术组件之一。通过继承Servlet类,开发人员可以编写各种Web应用程序,如处理用户注册、登录、数据查询等功能。 JSP(Java服务器页面)是一种使用Java编写动态页面的技术。它能够将Java代码嵌入到HTML页面中,并在服务器端动态生成页面。JSP可以处理复杂的业务逻辑,与Java代码和Servlet进行交互,在Java Web开发中扮演着重要的角色。 在实际应用中,Java Web开发综合运用XMLXSLT、Servlet和JSP可以实现丰富和灵活的功能。开发人员可以使用XML来配置Web应用程序,使用XSLT将数据转换为合适的格式,使用Servlet处理HTTP请求和生成响应,使用JSP编写动态页面。通过组合这些技术,可以开发出功能全面、性能高效的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值