在模板的主体内,有很多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="/UploadPic/2007-5/200752003341420.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标签向样式表中插入数据。 |