XSLTRANSFORM

XSLTRANSFORM 将 XML 文档转换为不同的数据格式。 可以将数据变换成 XSLT 处理器可处理的任何格式,包括但不限于 XML、HTML 或纯文本。

读取语法图跳过可视语法图XSLTRANSFORM(XML-文档 USINGxsl-stylesheet WITHxsl-参数 ASCLOB(2G)AS数据类型 )
数据类型
读取语法图跳过可视语法图CHARACTERCHAR(1)(整数)CHARACTERCHARVARYINGVARCHAR(整数)FOR BIT DATAFOR SBCS DATAFOR MIXED DATAccsid-子句CHARACTERCHARLARGE OBJECTCLOB(1M)(整数KMG)FOR SBCS DATAFOR MIXED DATAccsid-子句GRAPHIC(1)(整数)GRAPHIC VARYINGVARGRAPHIC(整数)DBCLOB(1M)(整数KMG)ccsid-子句NATIONAL CHARACTERNATIONAL CHARNCHAR(1)(整数)NATIONAL CHARACTERNATIONAL CHARNCHARVARYINGNVARCHAR(整数)NATIONAL CHARACTERNCHARLARGE OBJECTNCLOB(1M)(整数KMG)Normalize-子句BINARY(1)(整数)BINARY VARYINGVARBINARY(整数)BLOBBINARY LARGE OBJECT(1M)(整数KMG)
ccsid-子句
读取语法图跳过可视语法图CCSID整数Normalize-子句
normalize-子句
读取语法图跳过可视语法图NOT NORMALIZEDNORMALIZED

使用 XSLTRANSFORM 将 XML 数据转换为其他格式,包括将符合一个 XML 模式的 XML 文档转换为符合另一个 XML 模式的文档。

XML 文件
用于返回格式正确的 XML 文档的字符串, Unicode 图形字符串,二进制字符串或 XML 表达式。 这是使用 xsl-stylesheet 中指定的 XSL 样式表进行变换的文档。
xsl-stylesheet
用于返回格式正确的 XML 文档的字符串, Unicode 图形字符串,二进制字符串或 XML 表达式。 该文档是符合 XSLT V 1.10 建议的 XSL 样式表。 不支持包含 xsl: include 声明的样式表。 此样式表用于变换 xml-document 中指定的值。
xsl 参数
用于返回格式正确的 XML 文档的字符串, Unicode 图形字符串,二进制字符串或 XML 表达式。 这是为 xsl-stylesheet 中指定的 XSL 样式表提供参数值的文档。 该参数的值可以指定为属性或文本。
参数文档的语法如下所示:
<params xmlns="http://www.ibm.com/XSLTransformParameters">
<param name="..." value="..."/> 
<param name="...">enter value here</param> ... </params>

: 样式表文档中必须包含 xsl:param 个元素,这些元素的名称属性值与参数文档中指定的名称属性值相匹配。

AS 数据类型
指定结果数据类型。 指定结果数据类型的隐式或显式长度属性必须足以包含转换后的输出。 缺省结果数据类型为 CLOB(2G)。

如果指定了 CCSID 并且 data-type 是 GRAPHIC , VARGRAPHIC 或 DBCLOB ,那么 CCSID 必须是 Unicode CCSID。

如果未指定 CCSID 属性,那么将确定 CCSID ,如同将 XML-document 强制转换为 data-type 一样,如 CAST 规范中所述。

函数的结果具有指定的数据类型。 当以字符数据类型存储上述任何文档时,可能会发生导致数据丢失的 CCSID 转换。

如果 XML-documentxsl-stylesheet 为空,那么结果为空值。

前提条件:要使用 XSLTRANSFORM 功能,必须安装 XML Toolkit for IBM i 和 International Components for Unicode(ICU 选项)。

示例

此示例演示如何将 XSLT 用作格式化引擎。 要进行设置,请首先将下面的两个示例文档插入到数据库中。

CREATE TABLE XML_TAB (c1 INT, xml_doc CLOB(2M), xsl_doc CLOB(256K));
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
  WITH '<params xmlns="http://www.ibm.com/XSLTransformParameters"></params>')
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 用作最终用户输出的格式化引擎。