XSLTRANSFORM 标量函数 (scalar function)
XSLTRANSFORM 函数将 XML 文档变换成另一种数据格式。 对于XSLT处理器来说,输出可以是任何形式,包括但不限于XML、HTML和纯文本。
注:
- 为兼容 IBM®Semeru Runtime® (适用于 z/OS ,版本17或更高) ,XSLTRANSFORM标量函数需要一个容差APAR,即 PH56646 ( Db2 13用于)或 PH63240 ( Db2 12用于)。
XSLTRANSFORM的语法
XSLTRANSFORM的描述
模式为 SYSFUN。
- XML文档
- 该表达式返回一个格式正确的XML文档,数据类型为CHAR、VARCHAR或CLOB(2 MB)。 输入表达式可以包含XMLSERIALIZE,用于将XML数据类型序列化为CLOB。 xml文档 通过xsl-stylesheet中指定的XSL样式表进行转换。 XML 文档必须至少是结构良好的单根文档。
- XSL样式表
- 该表达式返回一个格式正确的XML文档,数据类型为CHAR、VARCHAR或CLOB(256 KB)。 输入表达式可以包含XMLSERIALIZE,用于将XML数据类型序列化为CLOB。 该文档是符合 W3C XSLT V1.0 建议的 XSL 样式表。 应用此样式表可转换 xml文档中指定的值。
- xsl参数
- 返回格式正确的XML文档或空字符串,数据类型为CHAR、VARCHAR或CLOB(64 KB)。 输入表达式可以包含XMLSERIALIZE,用于将XML数据类型序列化为CLOB。 xsl-parameters 为xsl-stylesheet中指定的XSL样式表提供参数值。 可以将参数值指定为属性或文本节点。 如果两者都指定了,则使用属性中的值。 xsl-stylesheet文档必须具有匹配的
param name属性值。 参数文档的语法如下所示:<params xmlns="http://www.ibm.com/XSLTransformParameters"> <param name="..." value="..."/> <param name="...">enter value here</param> ... </params>重要提示 :如果不需要 xsl参数 ,您仍然必须提供一个空字符串,否则函数结果将为空。
函数的结果为CLOB(2 MB)类型。
此用户定义函数需要 IBM SDK for z/OS®, Java™ Technology Edition Version 6。
此用户定义功能使用 W3C XSL Transformations V1.0 Recommendation提供的XSLT支持。
提示 :要创建自己的XSLTRANSFORM变体,请从示例成员DSNTESR中显示的CREATE FUNCTION开始。 根据您的环境更改函数名称和输入参数的定义大小。
XSLTRANSFORM的示例
这个例子说明了如何在C程序中使用XSLT作为格式化引擎。
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE IS CLOB(2M) xmldoc;
SQL TYPE IS CLOB(256K) stylesheet;
SQL TYPE IS CLOB(64K) xslparms;
SQL TYPE IS CLOB(2M) result;
EXEC SQL END DECLARE SECTION;
EXEC SQL
SET :xmldoc = CLOB('<?xml version="1.0"?><hi>Hello</hi>');
EXEC SQL SET :stylesheet = CLOB( '<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:param name="parm" select="'World'"/>
<xsl:template match="hi">
<out>
<xsl:value-of select="."/>
<xsl:text>, </xsl:text>
<xsl:value-of select="$parm"/>
<xsl:text>!!!</xsl:text>
</out>
</xsl:template>
</xsl:stylesheet>');
EXEC SQL SET :xslparms = CLOB(
'<params xmlns="http://www.ibm.com/XSLTransformParameters">
<param name="parm">Silicon Valley</param>
</params>');
EXEC SQL
SELECT SYSFUN.XSLTRANSFORM(:xmldoc, :stylesheet, :xslparms)
INTO :result FROM SYSIBM.SYSDUMMY1;XML文档由XSL样式表转换。 转型的结果是:
<?xml version="1.0" encoding="UTF-8"?>
<out>Hello, Silicon Valley!!!</out>
