技术开发 频道

DB2 V9.5的XSLT支持及新函数的使用


    IBM DB2 V9.5所提供的XSLTRANSFORM 功能还不仅仅局限于此。XSLTRANSFORM的一个重要特征是它能够在运行时接受参数。如果缺少此能力,那么您将需要维护一个较大的 XSLT 样式表库,XML 数据查询的每个变体使用一个样式表,或者,您需要手动为每种新查询编辑您的样式表。参数传递允许您使样式表的标准行为独立于特定查询的定制要求或独特要求。在仔细设计核心样式表后,您可以不再考虑它们,并可以在参数文件中设置任何定制行为。比如在唱片行的例子中,我们希望可以改变表的名字,使其表的名字可以随意的改变。这样我们就需要将表的名字设置为一个参数。为了达到这样的目的,修改在XML_TEST中的XSL_DOC为新的XSLT样式表如下: 

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="headline"/> <xsl:template match="/"> <html> <body> <h2><xsl:value-of select="$headline"/></h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

    在这个新的XSLT文档中,增加了<xsl:param name="headline"/>语句来传入一个参数,并且将以前的表的名字修改为<h2><xsl:value-of select="$headline"/></h2>使用参数。 

    为了方便传入参数,我们还需要一个数据库的表来存储传入的参数。

CREATE TABLE PARAM_TAB (DOCID INTEGER, PARAM VARCHAR(1000)); 

    在表PARAM_TAB中插入相关的参数数据

INSERT INTO PARAM_TAB VALUES
(1,
'<?xml version="1.0"?>
<params xmlns="http://www.ibm.com/XSLTransformParameters">
<param name="headline">My New CD Collection</param>
</params>'
); 
    在这里把传入的参数定义为“My New CD Collection” 

    再执行一次XMLTRANFORM函数,并使用参数

SELECT XSLTRANSFORM (XML_DOC USING XSL_DOC
WITH PARAM AS CLOB(1M)) FROM XML_TEST X, PARAM_TAB P WHERE X.DOCID=P.DOCID; 

    这样传入参数后,可以得到新生成的HTML如下: 

<html> <body> <h2>My New CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th aligh="left">Title</th><th aligh="left">Artist</th> </tr> <tr> <td>Empire Burlesque</td><td>Bob Dylan</td> </tr> </table> </body> </html>


    用IE浏览器打开后,新的页面显示如下:




    这样的话,就轻松实现了表的名字的转换。如果还要修改表的名字只需要传入相应的参数就可以了,而无需保存多个不同的XSLT变换表。

0