XSLTRANSFORM 标量函数
使用 XSLTRANSFORM 将 XML 数据转换为其他格式,包括将符合一种 XML 模式的 XML 文档转换为符合另一种模式的文档。
该模式是 SYSIBM。 不能将此函数指定为限定名。
XSLTRANSFORM 函数将 XML 文档变换成另一种数据格式。 可以将数据变换成 XSLT 处理器可处理的任何格式,包括但不限于 XML、HTML 或纯文本。
XSLTRANSFORM 使用的所有路径对于数据库系统来说都是内部路径。 目前,不能直接对外部文件系统中的文件或样式表使用此命令。
- XML文档
- 一个表达式,它返回数据类型为 XML、CHAR、VARCHAR、CLOB 或 BLOB 且结构良好的 XML 文档。 这是使用 xsl-stylesheet 中指定的 XSL 样式表进行变换的文档。
XML 文档必须至少是结构良好的单根文档。
xsl-样式表 - 一个表达式,它返回数据类型为 XML、CHAR、VARCHAR、CLOB 或 BLOB 且结构良好的 XML 文档。 该文档是符合 W3C XSLT V1.0 建议的 XSL 样式表。 不支持包含 XQUERY 语句或
xsl:include声明的样式表。 此样式表用于变换 xml-document 中指定的值。 xsl-参数 - 一个表达式,它返回数据类型为 XML、CHAR、VARCHAR、CLOB 或 BLOB 且结构良好的 XML 文档或空值。 这是为 xsl-stylesheet 中指定的 XSL 样式表提供参数值的文档。 可以将参数值指定为属性或文本节点。参数文档的语法如下所示:
<params xmlns="http://www.ibm.com/XSLTransformParameters"> <param name="..." value="..."/> <param name="...">enter value here</param> ... </params>样式表文档中必须包含
xsl:param元素,并且具有与参数文档中所指定的名称属性值相匹配的名称属性值。 - AS 数据类型
- 指定结果数据类型。 指定的结果数据类型的隐式或显式长度属性必须足够长,能够包含变换后的输出 (SQLSTATE 22001)。 缺省结果数据类型为 CLOB(2G OCTETS),Unicode 数据库除外,在该数据库中,当缺省设置为 CLOB(536870911 CODEUNITS32) 时,环境的字符串单元设置为 CODEUNITS32。
如果 xml-document 参数或 xsl-stylesheet 参数为空,那么结果将为空。
将上述任何文档存储在 CHAR、VARCHAR 或 CLOB 列中时可能会导致代码页转换,从而可能导致字符丢失。
示例
此示例演示如何将 XSLT 用作格式化引擎。 要获得设置,请先创建
XML_TAB 表,然后将包括 XML 文档的行和 XSL 样式表插入到该表中。
CREATE TABLE XML_TAB (DOC_ID INTEGER, XML_DOC XML, XSL_DOC XML);
INSERT INTO XML_TAB VALUES
(1,
'<?xml version="1.0"?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation = "/home/steffen/xsd/xslt.xsd">
<student studentID="1" firstName="Steffen" lastName="Siegmund"
age="23" university="Rostock"/>
</students>',
'<?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:param name="showUniversity"/>
<xsl:template match="students">
<html>
<head/>
<body>
<h1><xsl:value-of select="$headline"/></h1>
<table border="1">
<th>
<tr>
<td width="80">StudentID</td>
<td width="200">First Name</td>
<td width="200">Last Name</td>
<td width="50">Age</td>
<xsl:choose>
<xsl:when test="$showUniversity =''true''">
<td width="200">University</td>
</xsl:when>
</xsl:choose>
</tr>
</th>
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="student">
<tr>
<td><xsl:value-of select="@studentID"/></td>
<td><xsl:value-of select="@firstName"/></td>
<td><xsl:value-of select="@lastName"/></td>
<td><xsl:value-of select="@age"/></td>
<xsl:choose>
<xsl:when test="$showUniversity = ''true''">
<td><xsl:value-of select="@university"/></td>
</xsl:when>
</xsl:choose>
</tr>
</xsl:template>
</xsl:stylesheet>'
);
下面调用 XSLTRANSFORM 函数以将 XML 数据转换为 HTML 并显示出来。SELECT XSLTRANSFORM (XML_DOC USING XSL_DOC AS CLOB(1M)) FROM XML_TAB;结果为以下文档:<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1></h1>
<table border="1">
<th>
<tr>
<td width="80">StudentID</td>
<td width="200">First Name</td>
<td width="200">Last Name</td>
<td width="50">Age</td>
</tr>
</th>
<tr>
<td>1</td>
<td>Steffen</td><td>Siegmund</td>
<td>23</td>
</tr>
</table>
</body>
</html>
在此示例中,输出为 HTML 并且这些参数仅影响产生的 HTML 内容及提供的数据。 这样它会演示如何将 XSLT 用作最终用户输出的格式化引擎。
使用说明
可以使用许多方法来变换 XML 文档(其中包括使用 XSLTRANSFORM 函数、XQuery 更新表达式以及由外部应用程序服务器执行 XSLT 处理)。 对于存储在数据库表的 XML 列中的文档,可以通过使用 XQuery 更新表达式而不是使用 XSLT 来更高效地执行许多变换,因为 XSLT 始终需要解析正在变换的 XML 文档。 如果您决定使用 XSLT 来变换 XML 文档,那么应谨慎决定是变换数据库中的文档还是应用程序服务器中的文档。
