XSLT专业站 - 提供xslt和xml相关的资料书籍和教程  
XSLT专业站 - 提供xslt和xml相关的资料书籍和教程
网站地图  收藏本站
首页 | 热门文章 | 精彩实例 | 经典教程 | XSLT语法详解 | 资料下载 | 休闲天地 | 交流论坛
  当前位置:首页>精彩实例>文章内容
用 XML/XSL 来生成动态页面
来源:XSLT.org.cn 作者:XSLT专业站 发布时间:2007-08-04  
用 XML/XSL 来生成动态页面

        填入产品信息
        完成了文件头后,控制方法会调用java对象来产生它的xml。本例中调用的是product对象。product对象使用两个方法来产生它的xml表示。第一个方法toxml()通过产生<product>和</product>标签来建立product节点。然后它会调用internalxml(),这样就能提供产品xml所需的内容。internalxml()是一系列的stringbuffer.append()调用。stringbuffer也被转换成字符串并返回给控制方法。 
        public string toxml()
            { 
            stringbuffer xml = new stringbuffer("<product>\n"); 
            xml.append(internalxml()); 
            xml.append("</product>\n"); 
            return xml.tostring(); 
            }

        public string internalxml() 
            { 
            stringbuffer xml = new   stringbuffer("\t") .append(producttype).append("\n"); 
            xml.append("\t").append(idvalue.trim()).append("\n"); 
            xml.append("\t").append(idname.trim()).append("\n"); 
            xml.append("\t").append(page.trim()).append("\n"); 
            xml.append("\t").append(amount).append("\n");
            xml.append("\t").append(vendor).append("\n");
            xml.append("\t\n");
           xml.append("\t").append(pubdesc).append("\n");
           xml.append("\t").append(vendesc).append("\n");

            return xml.tostring(); 
        }


        关闭文件
        最后,xmlutils.enddocument()方法被调用。这个调用关闭xml标签(本例中为),并最终完成架构好的xml文件。来自控制方法的整个stringbuffer也转换成字符串,并返回给处理最初http请求的servlet。

三、用xsl作为模板语言

        为了得到html输出,我们把生成的xml文件和控制xml数据如何表示的xsl模板相结合。我们的xsl模板由精心组织的xsl和html标签组成。

        开始建模板
        我们的xsl模板开始部分与下面这段代码类似。第一行代码为必需代码,将本文件定义为xsl样式表。xmlns:xsl=属性引用本文件所使用的xml名称空间,而version=属性则定义名称空间的版本号。在文件的末尾,我们关闭标签。

        由<xsl:template>开始的第二行代码确定了xsl模板的模式。match属性是必需的,在这里指向xml标签<basketpage>。在我们的系统里,<basketpage>标签里包含<product> 标签,这使得xsl模板可以访问嵌在<product>标签内的产品信息。我们又一次必须在文件末尾关闭<xsl:template>标签。

        接下来,我们来看一看组织良好的html。由于它将被xml解析引擎处理,所以必须符合组织良好的xml的所有规则。从本质上来讲,这意味着所有的开始标签必须有对应的结束标签。例如,通常不被结束的<p>标签,必须用</p>关闭。


        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0">
        <xsl:template match="basketpage">
        <html>
        <head>
        <title>shopping bag / adjust quantity</title> 
        </head>
        <body bgcolor="#cccc99" bgproperties="fixed" link="#990000" vlink="#990000">
        <br/>
        </xsl:template> 
        </xsl:stylesheet>


        在模板的主体内,有很多xsl标签被用于为数据表示提供逻辑。下面解释两个常用的标签。 
        choose
        <xsl:choose>标签类似于传统编程语言中if-then-else结构的开始部分。在xsl中,choose标签表示在代码进入的部分中,赋值将触发动作的发生。拥有赋值属性的<xsl:when>标签跟在choose标签后面。如果赋值是正确的,位于<xsl:when>的开始和结束标签之间的内容将被使用。如果赋值错误,就使用<xsl:otherwise>的开始和结束标签之间的内容。整个部分用</xsl:choose>来结束。

        在这个例子里,when标签会为quantity标签检查xml。如果quantity标签里含有值为真的error属性,quantity标签将会显示列在下面的表格单元。如果属性的值不为真,xsl将会显示otherwise标签间的内容。在下面的实例里,如果error属性不真,则什么都不会被显示。

        <xsl:choose>
        <xsl:when test="quantity[@error='true']">
        <td bgcolor="#ffffff"><img height="1" width="1" src="http://img.sparks.com/images/i-catalog/sparks_images/sparks_ui/clearpixel.gif"/></td>
        <td valign="top" bgcolor="#ffffff" colspan="2"><font face="verdana, arial" size="1" color="#cc3300"><b>*not enough in stock. your quantity was adjusted accordingly.</b></font></td> 
        </xsl:when>
        <xsl:otherwise> 
        </xsl:otherwise>
        </xsl:choose>


        for-each
        <xsl:for-each>标签可以用来对相似xml数据的多种情况应用同一个样式表。对于我们来说,可以从数据库中取出一系列产品信息,并在web页上进行统一格式化。这里有一个例子: 

        <xsl:for-each select="package">
                <xsl:apply-templates select="product"/>
        </xsl:for-each>


        for-each 循环在程序遇到标签时开始。这个循环将在程序遇到标签时结束。一旦这个循环运行,每次标签出现时都会应用这个模板。

四、生成html

        将来的某一时刻,浏览器将会集成xml解析引擎。到那时,你可以直接向浏览器发送xml和xsl文件,而浏览器则根据样式表中列出的规则显示xml数据。不过,在此之前开发者们将不得不在他们服务器端的系统里创建解析功能。

        在sparks.com,我们已经在java servlet里集成了一个xml解析器。这个解析器使用一种称为xslt (xsl transformation)的机制,按xsl标签的说明向xsl模板中添加xml数据。

        当我们的java servlet处理http请求时,servlet检索动态生成的xml,然后xml被传给解析引擎。根据xml文件中的指令,解析引擎查找适当的xsl样式表。解析器通过dom结构创建html文件,然后这个文件再传送给发出http请求的用户。

        如果你选择使用sax模型,解析器会通读xml源程序,为每个xml标签创建一个事件。事件与xml数据对应,并最终按xsl标签向样式表中插入数据。



标题: 用 XML/XSL 来生成动态页面
关键字:XML XSL 动态页面 模板
共2页: 上一页 [1] 2 下一页
上一篇:查找公共祖先节点   下一篇:利用 xslt 对 xml 进行缩进格式化处理
  精彩实例热点文章
·XSLT 实例:使用不同的轴(Axis
·查找公共祖先节点
·利用 xslt 对 xml 进行缩进格式
·XSLT 实例:创建带有“前一页”
·利用 XSL 解析 RSS
·把数据库输表用 XSLT 转化为树状
·查找节点的父节点
·利用 XSL 对 XML 数据进行加密和
·XSLT 实例:统计作者出版物的销
·XSLT 实例:使用变量(Variable)
  精彩实例相关文章
·查找公共祖先节点
·利用 xslt 对 xml 进行缩进格式
·查找节点的父节点
·利用 XSL 对 XML 数据进行加密和
·把数据库输表用 XSLT 转化为树状
·利用 XSL 解析 RSS
·XSLT 实例:使用不同的轴(Axis
·XSLT 实例:统计作者出版物的销
·XSLT 实例:创建带有“前一页”
·XSLT 实例:使用变量(Variable)
Copyright© 2007 xslt.org.cn All rights reserved.