XSLTRANSFORM 标量函数 (scalar function)

XSLTRANSFORM 函数将 XML 文档变换成另一种数据格式。 对于XSLT处理器来说,输出可以是任何形式,包括但不限于XML、HTML和纯文本。

注:
  • 为兼容 IBM®Semeru Runtime® (适用于 z/OS ,版本17或更高) ,XSLTRANSFORM标量函数需要一个容差APAR,即 PH56646 ( Db2 13用于)或 PH63240 ( Db2 12用于)。

XSLTRANSFORM的语法

阅读语法图跳过可视化语法图XSLTRANSFORM( XML文档, XSL样式表, xsl参数)

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>